Невозможно запустить внешнюю программу из Java без закрытия Java-приложения
Я пытаюсь запустить внешнюю программу из моего Java-приложения Swing, используя это:
Process proc = Runtime.getRuntime().exec(cmd);
Но внешняя программа никогда не запускается, пока я не закрою свое Java-приложение... каждый раз. Он ждет запуска только после того, как я закрылся.
внешняя программа, которую я пытаюсь запустить, является exe, которая принимает аргументы так:
cmd = "externalProgram.exe -v --fullscreen --nowing";
Что может быть здесь не так. Достаточно забавно, это работает как ожидалось, если я попробую что-то простое, например
Process proc = Runtime.getRuntime().exec("notepad.exe");
2 ответа
Возможно, вам придется прочитать стандартный вывод процесса или закрыть стандартный ввод, прежде чем он продолжится. Для чтения вывода проблема в том, что буфер может заполниться, блокируя программу; для закрытия ввода проблема заключается в том, что некоторые программы будут пытаться прочитать данные оттуда, если они доступны, в ожидании этого. Один или оба из этих трюков, скорее всего, исправят ситуацию для вас.
Вы также можете прочитать поток вывода ошибок, чтобы проверить, что программа на самом деле неудачно выполняется
String cmd = "svn.exe";
Process proc = Runtime.getRuntime().exec(cmd);
BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
String line = null;
while((line=reader.readLine())!=null){
System.out.println(line);
}
reader.close();
Моя консоль показывает
Введите 'svn help' для использования.
Что наглядно показывает, что программа была выполнена Java.