Дождитесь окончания выполнения команды DOS - Java - PullRequest
1 голос
/ 17 ноября 2011

Я пытаюсь импортировать большое количество .dmp файлов в БД MySQL, и поскольку нужно импортировать более 250 файлов, я написал приложение для автоматизации выполнения 250+DOS команды.Код для него:

String baseCommand = "cmd /c MySQL -h localhost -u root amateurstable < ";
Process p = Runtime.getRuntime().exec(baseCommand + filePath);

Он выполняет команды, которые он должен.Проблема в том, что некоторые из файлов .dmp имеют размер более 100 МБ, но приведенный выше код не ожидает завершения выполнения команды.

Когда он выполняет команду импорта для большого файла, он не ожидает окончания импорта и сразу же выполняет следующую команду.Это вызывает много головной боли с точки зрения отзывчивости компьютера.

Вопрос в том, как заставить его ждать завершения выполнения команды?

Ответы [ 4 ]

5 голосов
/ 17 ноября 2011

Runtime.exec возвращает Process объект, который имеет метод waitFor ().

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

Поскольку у вас уже есть этот объект Process, вы можете просто добавить вызов waitFor ()

Process p = Runtime.getRuntime().exec(baseCommand + filePath);
p.waitFor();
2 голосов
/ 17 ноября 2011

Вы можете использовать ProcessBuilder :

ProcessBuilder pb = new ProcessBuilder(baseCommand + filePath, "");
Process start = pb.start();
start.waitFor();
2 голосов
/ 17 ноября 2011

использование process.waitFor()

0 голосов
/ 17 ноября 2011

Вы уже смотрели на Apache Commons Exec?

http://commons.apache.org/exec/tutorial.html

Похоже, вы хорошо справляетесь со своей обработкой, но я думаю, что работать с ней как с оболочкой немного проще, чем с Runtime exec. Если вам нужно убить процесс, это может облегчить жизнь.

...