Завершение после инициализации пакетного скрипта с java

#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 завершит работу еще до запуска командной строки. Большое спасибо за помощь