我们正在尝试使用 调用 Windows 中的外部程序Runtime.getRuntime().exec(...)
,但这似乎会导致死锁。外部进程异步启动,但不久后停止执行任何操作。当我停止 Java 线程时,外部进程继续,所以它必须以某种方式等待 Java 线程。这是我们目前的相关代码:
try {
Process process = Runtime.getRuntime().exec(System.getProperty("user.dir") + "program.exe");
BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream())); //Read output of program from its buffer.
String line;
while((line = input.readLine()) != null) {
System.out.println(line);
}
process.waitFor();
} catch(IOException e) {
e.printStackTrace();
} catch(InterruptedException e) {
e.printStackTrace();
}
程序在输出 3313 个字节后停止。我们尝试了各种清空缓冲区的方法,因为这似乎有时会导致这个问题。
Java 程序正在等待外部程序完成(process.waitFor()
),直到我终止 Java 程序,外部程序才完成,因此导致死锁。我们怎样才能防止这种情况发生?我们无法访问外部程序的源代码。