2010-02-17 8 views
1

Java에서 동기화 문제가 있습니다. "p1"프로세스가 완료 될 때까지 주 스레드가 대기하도록합니다. "waitfor"메서드를 사용했습니다. 그것은 나를 위해 일하지 않았다.다른 프로세스가 완료 될 때까지 주 프로세스가 대기합니다.

Process p1 = runtime.exec("cmd /c start /MIN " + path + "aBatchFile.bat"); 
p1.waitFor(); 

아무에게 도와 줄 수 있습니까?

정말 고마워요.

+0

. p1.waitFor()의 반환 값은 무엇입니까? – echo

+0

어떤 방식으로 작동하지 않습니까? –

답변

4

여기서 문제는 exec()에서 다시 가져 오는 Process 개체가 시작한 cmd.exe의 인스턴스를 나타냅니다. cmd.exe 인스턴스는 배치 파일을 시작하고 을 종료합니다 (배치 파일을 기다리지 않고 start 명령이 수행하기 때문에). 이 시점에서 waitFor()이 반환됩니다.

가이 문제를 방지하려면, 직접 배치 파일을 실행할 수 있습니다 :

Process p1 = runtime.exec(path + "aBatchFile.bat"); 
p1.waitFor(); 

대안이의 /wait 명령 줄 옵션을 시도 : 그것은 작동해야

Process p1 = runtime.exec("cmd /c start /wait /MIN " + path + "aBatchFile.bat"); 
p1.waitFor(); 
+0

예 - 또한 시작을 제거하면 기다리는 것이 좋습니다. – Fakrudeen

+0

답변 해 주셔서 감사합니다. 퍼팅/대기가 다시 작동하지 않습니다. 주 스레드를 기다리지 않습니다. "start"를 제거하거나 "cmd/c start/wait/MIN"을 제거하면 프로세스 p1이 전혀 실행되지 않습니다. 나는 그들을 검사했다. 도와 주시겠습니까? 감사합니다. – Shadi

+0

@Shadi : "start/MIN"을 지우면 명령어가 exec ("cmd/c"+ path + "aBatchFile.bat")가됩니다. –

관련 문제