#java #process #batch-file #runtime
#java #процесс #пакетный файл #время выполнения
Вопрос:
Я хочу инициализировать один пакетный скрипт, используя Java-код. После его инициализации мне нужно выйти из Java-программы, и я хочу, чтобы пакетный скрипт продолжил выполнение. Как я могу этого добиться. Для этого я использовал среду выполнения и процесс. Но он ожидает завершения пакетного скрипта, прежде чем перейти к следующему. Это пример программы, которую я опробовал.
try {
Runtime r = Runtime.getRuntime();
System.out.println("Executing process");
Process p = r.exec("c:\anoop\ping.bat");
System.out.println("Executed process");
p.waitFor();
System.out.println("Exiting with out :: ");
} catch (Exception e) {// Catch exception if any
System.err.println("Error: " e.getMessage());
e.printStackTrace();
}
Если я использую p.exitValue(), это выдает ошибку java.lang.Исключение IllegalThreadStateException: процесс не завершен. Короче говоря, я просто хочу инициализировать пакетный скрипт, а затем выйти из программы Java.
Спасибо, Anoop
Ответ №1:
Чтобы получить значение завершения процесса, используйте:
int res = p.waitFor();
System.out.println("Exiting with out :: " res);
Если вы хотите, чтобы процесс просто продолжался, не ждите его (не вызывайте wait()
)
Если процесс ожидает ввода или выдает какой-либо вывод, вы должны обработать это (предпочтительно в отдельных потоках), поскольку весь ввод-вывод перенаправляется.
Комментарии:
1. Спасибо за ответ. Я пробовал это, но проблема в том, что я хотел выполнить один пакетный скрипт, и если я не даю waitFor (), он не выполняется. Есть ли какой-либо другой способ, которым я могу выполнить пакетный скрипт?
2. Я думаю, вам следует добавить в свою команду следующее: «cmd / c start yourbatch.bat»
3. Эй, это не нужно. я только что понял это. Нет необходимости в cmd. Просто нужно добавить простой режим ожидания 100 для потока. Ошибка. достаточно времени ожидания (100). потому что JVM завершит работу еще до запуска командной строки. Большое спасибо за помощь