[英]Not enough Storage is available to process this command when running java utilities from command line
[英]Java: Redirecting inner process output when running from command line
我使用以下代码来重定向从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();
可能是由于某种原因该进程正在打印错误并退出。 因此,实际输出进入Err流,而不进入Out流。 您的代码仅重定向出流,因此重要的过程错误信息可能会丢失。 我建议使用以下代码同时继承Out和Err流:
ProcessBuilder builder = new ProcessBuilder("MyProcess.exe");
builder.inheritIO();
重定向两个流的另一个原因与子进程的输出缓冲有关。 如果父进程(您的Java应用程序)没有读取或重定向子进程的标准流(Out和Err),则子进程可能会在一段时间后被阻止,无法取得进一步的进展。
无论如何,在输出中可能存在错误绝对是没有问题的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.