Выполнение команды из Java и ожидание завершения команды

в моей 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 ответов


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

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

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


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

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