我有一个使用Process Builder启动外部程序的Java程序。
我有一个带有命令的Process Builder,我使用下面的代码来实现程序。
我想要做的就是像外部程序那样打印输出,我尝试使用以下代码执行此操作:
pb.redirectErrorStream(true);
p = pb.start();
InputStream is = p.getInputStream();
InputStreamReader isr = new inputStreamReader(is);
BufferedReader br = new BufferedReader(isr, 32);
while((line = br.readLine()) != null){
System.out.println(line);
}
问题是我的程序在外部程序结束之前都是静音的,突然之间所有输出都会立刻出现。或者,如果有更多输出,它可能没有安静,但我希望它产生输出,即无缓冲。
(对我而言)显而易见的问题是BufferedReader及其缓冲区的大小,但问题是我试图拥有一个非常小的缓冲区,但无济于事。 我也试图避免使用BufferedReader,而是直接使用InputStreamReader,但它们也是一样的。
这里的任何人都能理解我的问题,也许有解决方案吗?
答案 0 :(得分:0)
这是由执行程序中的缓冲引起的,而不是由Java引起的。你无法从Java端做到这一点。
答案 1 :(得分:-2)
这可能会有所帮助 Get Java Runtime Process running in background
在读取外部应用程序的输出时运行线程