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 프로그램을 종료 할 때까지 외부 프로그램이 완료되지 않아 교착 상태가 발생합니다. 어떻게 우리가 이것을 막을 수 있습니까? 우리는 외부 프로그램의 출처에 접근 할 수 없습니다. 외부 프로그램이 완료 될 때까지