我正在使用一个线程来捕获进程的流输出,然后将该流输出到Eclipse控制台。我有一个问题,就是何时终止执行流输出的线程。
Thread t = new Thread(new Runnable(){
private boolean isProcessDone(Process p)
{
//not sure what to do here
}
public void run()
{
Process p = Runtime.getRuntime().exec("executable with output");
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedReader error = new BufferedReader (new InputStreamReader(p.getErrorStream()));
while ( !isProcessDone(p) ) {
String line;
if( (line = input.readLine()) != null )
{
System.out.println(line);
}
if( (line = error.readLine()) != null )
{
System.out.println(line);
}
}
input.close();
error.close();
}
});
t.start();
我的问题是
isProcessDone()
函数应该放什么内容。我参考的例子使用了流的ready()
函数,但我不确定这是否适用于只使用std::err和std::out其中之一的程序。我也尝试过使用。try{
p.exitValue();
return true;
}catch(IllegalThreadStateException e){}
return false;
但是在 while 循环有机会处理流之前,线程已经完成了,输出被丢失。