我們正在試圖調用使用Runtime.getRuntime().exec(...)
在Windows外部程序,但它似乎導致死鎖。外部進程異步啓動,但一段時間後停止執行任何操作。 當我停止Java線程,外部過程繼續,所以它必須以某種方式等待Java線程。這是我們目前的相關代碼:調用Runtime.getRuntime()。EXEC(...)導致死鎖
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程序之前,外部程序纔會完成,從而導致死鎖。我們如何防止這一點?我們無法訪問外部程序的來源。