1

当我尝试此代码时,它似乎已执行但未执行。

进程构建器可以找到可执行文件。系统写入 println 命令。

我找到了一些示例代码,但我的可执行文件与 java 文件不在同一个文件夹中。

private static void executeOneFile(String folderPath) {
    Process p;
    String exePath = path + "\\" + folderPath + "\\";
    try {
        p = new ProcessBuilder(exePath +  "myFile.exe").start();
        //p = Runtime.getRuntime().exec("myFile.exe", null , new File(exePath) );

        System.out.println("p is running");
        p.waitFor();
        System.out.println("p ended");
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
4

1 回答 1

1

上面的代码有几个问题:

  1. 您没有正确处理标准输入/标准输出。所以也许有一个错误,但你不会看到它,因为你没有读取子进程的输出。
  2. 接下来,关闭孩子总是一个好主意,stdinp.getOutputStream().close()确保它不会挂起等待输入。
  3. 最后,进程的当前目录与 Java VM 的目录相同。因此,如果您使用相对路径来写入文件,它最终会出现在某个地方,但很少会出现在您期望的地方。将文件的绝对路径传递给您的子进程,以确保输出到达应有的位置。
于 2013-05-30T16:05:29.593 回答