我使用以下代码来重定向我从我的 Java 应用程序启动的进程的输出:
ProcessBuilder builder = new ProcessBuilder("MyProcess.exe");
builder.redirectOutput(Redirect.INHERIT);
builder.redirectErrorStream(true);
现在,当我从 eclipse 运行代码时,它工作正常 - 我可以在 Eclipse 的控制台中看到输出。
然而,当我创建一个 jar 文件并从 cmd 窗口运行它时,例如java -jar MyJar.jar
,它不打印进程的输出。这可能是什么原因?
最佳答案
我知道我回答晚了,但我在找到答案之前就遇到了这个问题,并且想节省同一条船上的其他人一些搜索。
这实际上是 Windows 的一个已知错误:https://bugs.openjdk.java.net/browse/JDK-8023130
您可以通过自己重定向流来绕过它:
Process p = pb.start();
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
p.waitFor();
br.close();
关于Java:从命令行运行时重定向内部进程输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19711665/