【发布时间】:2014-05-18 02:54:39
【问题描述】:
我正在对一个外部 Windows 程序进行炮击,该程序通过重复将新行推送到错误流来更新其进度。
命令提示符在运行时看起来像这样:
10% done
10% done
11% done
等等。
因此,我在我的 java 应用程序中取得了一些成功:
Process process = Runtime.getRuntime().exec("my little command");
BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(process.getErrorStream()));
String s;
while((s = stdError.readLine())!=null)
{
System.out.println(s);
}
不幸的是,正如您可能已经猜到的那样,存在一些问题。 stdError.readLine() 阻塞,直到错误流中有 +- 4000 字节,然后才在快速会话中打印每一行,然后再次挂起。
我尝试更改 BufferedReader 缓冲区大小,并使用较小长度的 stdError.read(char [] cbuf, int off, int len),但无济于事。
如何解决这个挂起问题?
提前致谢:)
【问题讨论】:
标签: java process stream blocking runtime.exec