为了避免被调用的进程在输出大量关于标准输出和/或错误的数据时被阻塞,您必须使用Craigo提供的解决方案。还请注意,ProcessBuilder优于Runtime.getRuntime().exec()。这有几个原因:它更好地标记了参数,并且还处理了错误标准输出(也检查了这里).ProcessBuilder builder = new ProcessBuilder("cmd", "arg1", ...);builder.redirectErrorStream(true);final Process process = builder.start();// Watch the processwatch(process);
我使用一个新的函数“监视”来收集新线程中的数据。此线程将在调用进程结束时在调用进程中完成。private static void watch(final Process process) {
new Thread() {
public void run() {
BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = null;
try {
while ((line = input.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();}