Java Runtime.getRuntime().exec() 阻塞问题

Java Runtime.getRuntime().exec() 执行命令,遇到的阻塞问题:

仅仅处理了标准输出process.getInputStream(),没有处理错误输出,结果执行xcodebuild命令时,执行中断,不能继续执行,原来是被错误输出阻塞了(由于xcodebuild的自身问题,它会把一些输出当作错误)。

解决方案,这里需要另起一个线程来处理错误输出,process.getErrorStream(), 并且要先处理错误,然后处理标准输出。

1
2
3
Process process = Runtime.getRuntime().exec(mycmd);
Thread t = new Thread(new InputStreamRunnable(process.getErrorStream(),"ErrorStream"));
t.start();

在InputStreamRunnable中用readline()把Steam读掉。