![](/img/trans.png)
[英]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.