2010-02-17 1 views
1

У меня есть проблема синхронизации в java. Я хочу, чтобы мой основной поток дождался завершения процесса «p1». Я использовал метод «waitfor». это не сработало для меня.вызывают основной процесс до тех пор, пока не завершится другой процесс.

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

Может ли кто-нибудь помочь мне, пожалуйста?

Большое вам спасибо.

+0

Он должен работать. Какова обратная величина p1.waitFor()? – echo

+0

Каким образом это не работает? –

ответ

4

Проблема заключается в том, что объект Process, который вы возвращаете с exec(), представляет собой экземпляр 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

Спасибо за ваш ответ. установка/ожидание не работает для меня снова. Он не ждет основной поток. если я удаляю «старт» или удаляю «cmd/c start/wait/MIN», процесс p1 вообще не запускается. Я проверил их. Не могли бы вы мне помочь? Спасибо. – Shadi

+0

@Shadi: И что произойдет, если вы удалите «start/MIN», поэтому ваша команда «exec» («cmd/c» + path + «aBatchFile.bat») '? –