java - 使用 Java 在 Linux 上的文件夹内运行进程

标签 java linux process directory processbuilder

所以我有一个运行并读取命令行 Linux 应用程序输出的 JAR 程序。此应用程序位于一个临时文件夹中,我的 JAR 位于该文件夹中。

这是读取输出的 Java 代码:

Process proc;
ProcessBuilder pb = new ProcessBuilder();
pb.command("temp/myapp", "arg1");
pb.redirectErrorStream(true);
try {
     proc = pb.start();
} catch (IOException ex) {
    System.out.println("ERROR: Couldn't start process");
}
scan = new Scanner(proc.getInputStream());
String line = "";
while (scan.hasNext())
      line += scan.nextLine() + System.lineSeparator();
scan.close();

当然,稍后我会返回我读入的字符串。

现在,问题是Scanner 抛出NullPointerException,这意味着无法找到或无法运行该进程。 当我从临时文件中取出可执行文件并使用

pb.command("./myapp", "arg1");

我的程序运行良好。

如果我打开 JAR 所在的终端,temp/myapp arg1 将准确返回它应该返回的内容。只有 Java 代码似乎无法在内部临时运行。

问题是,如果不是我上面描述的方式,我该如何指向 temp 中的 CLI 应用程序?

PS:Java 应用程序以相同的设置在 Windows 上运行,使用 pb.command("temp/myapp", "arg1") 和 myapp 的 Win 版本,所以这是一个 Linux-具体问题。

最佳答案

我认为它没有在各自的路径上进行处理。尝试给出进程的绝对路径,然后执行。希望它能奏效。

关于java - 使用 Java 在 Linux 上的文件夹内运行进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51862124/

相关文章:

java - 如何从 imputProcessor 类中绘制纹理? LibGDX

java - 通过以太网将Arduino的模拟传感器值发送到android应用程序

java - float 和 int 之间的除法无法编译

c - 如何通过进程发送事件信号 - C

c++ - 什么是进程和线程?

java - 不使用 .replace() 的替换方法

linux - 尝试计算 BASH 中的圆的半径和面积

php - 如何在 linux 服务器上升级 php?

linux - 在 Linux 上正确配置 PySpark 和 Anaconda3

c - 是什么杀死了父进程?