Windows PC에서 다른 응용 프로그램을 실행해야하는 응용 프로그램을 빌드하고 있습니다. 앱이 시작될 때 코드는 실행을 계속하기 위해 해당 프로그램을 닫을 때까지 기다려야합니다.Java process.waitFor()가 스레드를 차단하지 않습니다.
System.out.println("Starting ccleaner...");
Process p = Runtime.getRuntime().exec("C:\\Program Files\\CCleaner\\CCleaner64.exe");
System.out.println("Before wait");
p.waitFor();
//Here it should wait until the subprocess is
// exited/the ccleaner programs exit button is clicked
System.out.println("After wait");
일어나는 모든 일은 기다리지 않고 곧바로 실행됩니다. 나는 문서의 waitFor()
방법을 고개는 말한다 :
가 필요한 경우에이 Process 객체가 나타내는 프로세스가 종료 할 때까지 현재의 thread를 대기시킵니다. 이 메소드는, 서브 프로세스가 벌써 종료하고있는 경우에 즉시 복귀합니다. 하위 프로세스가 아직 종료되지 않은 경우 하위 프로세스가 종료 될 때까지 호출 스레드가 차단됩니다.
그리고 이것은 나에게 꽤 분명해 보입니다. 그러나이 사이트에서이 문제와 관련한 다른 질문을 살펴본 결과 스트림을 읽는 것과 관련된 몇 가지 해결책을 찾았습니다.하지만 대부분이 자신이 원하는 바트 파일을 가지고있을 때 이해합니다. 그러나 나는 이것도 시도했지만 제대로 작동시키지 못하고있다. 재미있는 점은 위의 코드는 tutorialpoints.com에서 제공되는 것과 거의 동일하다는 것입니다.
나는 또한 process.isAlive()
을 사용해 보았지만 그 중 하나를 사용할 수는없는 것 같습니다.
내가 잘못하고있는 것을 아는 사람이 있습니까?
OP가 _하지 않는 것은'waitFor()'의 반환 값을 분석하는 것입니다. –
그건'waitFor()'의 블로킹에 영향을주지 않을 것입니다. –
그렇습니다. 적어도 반환 값을 살펴보면 하위 프로세스가 수행중인 작업에 대해 설명 할 것입니다. –