как подождать и закрыть командную строку в Java - PullRequest
3 голосов
/ 23 февраля 2009

Я использую следующий код для выполнения командного файла:

java.lang.Runtime rt = java.lang.Runtime.getRuntime();
Process pr = rt.exec("MyBatch.bat");

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

Ответы [ 5 ]

8 голосов
/ 23 февраля 2009

Используйте Process.waitFor(), чтобы ваш поток ожидал завершения выполнения командного файла.

java.lang.Runtime rt = java.lang.Runtime.getRuntime();
Process pr = rt.exec("MyBatch.bat");
pr.waitFor();

Вы также можете использовать ProcessBuilder вместо Runtime.getRuntime().exec(), если вам нужен доступ к выходу и / или входу консоли.

3 голосов
/ 23 февраля 2009

Самый простой способ - использовать метод .waitFor () созданного вами объекта процесса: pr.waitFor();

Это блокирующий вызов, означающий, что никакой другой код не будет выполнен до возврата этого вызова.

1 голос
/ 23 февраля 2009

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

Кроме того, вы можете перенаправить вывод командного файла и ошибки в файл.

0 голосов
/ 18 марта 2009

Вы можете отслеживать InputStreamReader из вашего процесса. и трассировка строк внутри файла bat.

Когда вы EOF, выход из командной строки

см. Пример или полный исходный код. нажмите здесь

0 голосов
/ 23 февраля 2009

Посмотрите документацию для класса Процесс .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...