как дать подождать и закрыть командную строку в java

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

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

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

Ответов (5)

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

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

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

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

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

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

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

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

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

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

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