Запускаю процесс через exec. Как подождать, пока он выполнится?
Запускаю разархивирование.
Process proc1 = Runtime.getRuntime().exec("cmd /c d:/time/pak/rar.exe x d:/time/pak/folder.rar d:/time/1");
Архивирование длится около минуты. После него нужно выполнять определенные действия. Что можно делать, чтобы программа дальше не выполнялась, пока выполняется процесс.
Thread.sleep() не помогает. Этот метод останавливает и архивирование тоже. Process ping = Runtime.getRuntime().exec("ping -n 60 localhost"); тоже самое, останавливает извлечение архива.
proc1.waitFor(); не работает
Если написать
rocess proc1 = Runtime.getRuntime().exec("cmd /c start /wait d:/time/pak/rar.exe x d:/time/pak/folder.rar d:/time/1");
то proc1.waitFor(); работает, но появляется консоль.
Ответы (1 шт):
Process.waitFor ждёт завершения запущенного процесса. Он работает и возвращается как только запущенный процесс завершается. Дело в том что Вы запускаете два процесса - cmd и rar, причем cmd запускает rar и завершается (вариант без /wait).
Судя по комментариям Вас не совсем устраивает факт появления консоли от cmd. Тогда возникает вопрос, а зачем вообще запускать cmd? Почему бы не запускать сразу rar?
Process proc1 = Runtime.getRuntime().exec("d:/time/pak/rar.exe x d:/time/pak/folder.rar d:/time/1");
если все же cmd и start нужны, то start может запускать без консоли с опцией /b см: https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/start
еще можно попробовать запускать через start но без cmd