Как запустить командный файл сервера (который работает вечно) и вернуть элемент управления в Java-программу, не закрывая этот пакет - PullRequest
0 голосов
/ 28 декабря 2010

У меня есть Java-программа:

Process proc = Runtime.getRuntime().exec("cmd /c callServer.bat");
int exitVal = proc.waitFor();
System.out.println("Process exitValue: " + exitVal);

Который вызывает пакетный файл "callServer.bat":

@echo on
cd bin
call shutdown 2011
call server.bat

Этот пакетный файл вызывает файл server.bat, который представляет собой пакетный файл сервера, который должен работать вечно в течение всей программы. Я хочу вернуть элемент управления после запуска server.bat в мою java-программу, которая будет делать другие вещи. Пожалуйста, помогите мне, так как я потратил на это столько времени и не смог найти никакого решения.

Ответы [ 3 ]

4 голосов
/ 28 декабря 2010

Может быть так же просто, как запустить процесс в другом потоке. Это выполнит процесс в отдельном потоке и позволит вашему основному потоку продолжить работу во время выполнения командного файла:

Thread thread = new Thread() {
    public void run() {
        Process proc = Runtime.getRuntime().exec("cmd /c callServer.bat");
        int exitVal = proc.waitFor();
        System.out.println("Process exitValue: " + exitVal);
    }
};

thread.start();
0 голосов
/ 28 декабря 2010

Вы можете использовать функцию Process.exitValue (), чтобы получить значение выхода, не дожидаясь закрытия программы, однако это, очевидно, не будет работать, если программа все еще работает.

Если бы вы тоже хотели, вы могли бы сделать что-то вроде:

Process proc = Runtime.getRuntime().exec("cmd /c callServer.bat");
while(condition){
   try{
      exitVal = proc.exitValue();
      System.out.println("Process exitValue: " + exitVal);
   }
   catch(Exception e){/*do nothing*/}
   //other code goes here
}

Вроде бы некрасиво, но вы могли бы сделать это, если не устраивает многопоточность.Но использование потока было бы правильным способом сделать это.

0 голосов
/ 28 декабря 2010

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

надеюсь, что вы найдете это для какого-либо использования

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