Реализовать ожидание между процессами в Java? - PullRequest
3 голосов
/ 17 марта 2009

Мне нужна помощь в понимании и реализации «ожидания завершения процесса» между различными процессами в моем приложении, которое необходимо выполнить пошагово . Мой файл Java запускает пакетный файл, который затем запускает скрипт. В заключении этого есть ряд команд, которые мне нужно выполнить (через командную строку) последовательно. Я использую:

Runtime.getRuntime().exec("cmd /c start " + command)

для запуска командных файлов и команд (не уверен, что эта информация актуальна). Прямо сейчас происходит то, что второй шаг, который должен произойти в моем приложении, выполняется перед завершением первого шага (запуска командного файла, который запускает скрипт). Мне нужно сделать первый шаг перед запуском следующей серии команд. Я действительно надеюсь, что я понимаю!

Ответы [ 3 ]

6 голосов
/ 17 марта 2009

exec () возвращает экземпляр Process, для которого вы можете сделать waitFor ().

Будьте осторожны: я думаю, что «start» фактически вызовет отдельный процесс Windows, поэтому waitFor () может вернуться до завершения команды. Попробуйте удалить «start» из командной строки?

3 голосов
/ 10 декабря 2009

Легко:

просто вызовите метод waitFor () вашего экземпляра Process. Он остановит поток, пока не завершится внешний процесс;

1 голос
/ 17 марта 2009

Не могли бы вы поместить эту серию команд в свой командный файл?

В противном случае вы можете использовать ProcessBuilder, чтобы получить объект Process, и вызвать на нем waitFor():

заставляет текущий поток при необходимости ждать, пока процесс, представленный этим объектом Process, не завершится.

РЕДАКТИРОВАТЬ: На самом деле, exec() возвращает Process, так что вам вообще не нужно беспокоиться о ProcessBuilder.

...