を使用して 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 プログラムを終了するまで完了しないため、デッドロックが発生します。どうすればこれを防ぐことができますか? 外部プログラムのソースにはアクセスできません。