Выполнение команды из Java и ожидание завершения команды - PullRequest
11 голосов
/ 22 июня 2011

В моей Java-программе я создаю процесс, который выполняет команду для запуска командного файла, например:

try {
        File tempFile = new File("C:/Users/Public/temp.cmd");
        tempFile.createNewFile();
        tempFile.deleteOnExit();


        setContents(tempFile, recipe.getText()); //Writes some user input to file
        String cmd = "cmd /c start " + tempFile.getPath();


        Process p = Runtime.getRuntime().exec(cmd);


        int exitVal = p.waitFor();

        refreshActionPerformed(evt);

    } catch (InterruptedException ex) {
        Logger.getLogger(mainFrame.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (IOException ex) {
        Logger.getLogger(mainFrame.class.getName()).log(Level.SEVERE, null, ex);
    } 

Теперь я хотел бы, чтобы команда

refreshActionPerformed(evt);

запускается только после завершения выполнения вызванного мной пакетного файла.Но сейчас он запускается сразу после открытия командной строки.

Как это исправить?

Ответы [ 3 ]

18 голосов
/ 27 июня 2011

Мне удалось найти ответ в другом месте.Чтобы исходный процесс оставался открытым до завершения пакетного файла, все, что вам нужно, это "/ wait"

Process p = Runtime.getRuntime().exec("cmd /C start /wait filepath.bat");
int exitVal = p.waitFor();
2 голосов
/ 22 июня 2011

вызов "cmd / c start" заставляет cmd запустить другой экземпляр и немедленно выйти. Попробуйте вынуть команду «Пуск».

1 голос
/ 08 февраля 2017

Ответ правильный.Я добавил, что окно, открытое кодом, нужно закрыть вручную.

Process p = Runtime.getRuntime().exec("cmd /C start /wait filepath.bat");
int exitVal = p.waitFor();
...