Невозможно запустить внешнюю программу из Java без закрытия Java-приложения - PullRequest
1 голос
/ 10 апреля 2011

Я пытаюсь запустить внешнюю программу из моего Java-приложения Swing, используя это:

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

Но внешняя программа никогда не запускается, пока я не закрою свое Java-приложение ... каждый раз.Он ожидает запуска только после того, как я закрылся.

внешняя программа, которую я пытаюсь запустить, является exe-файлом, который принимает аргументы так:

cmd = "externalProgram.exe -v --fullscreen --nowing";

Что может быть здесь не так.Достаточно забавно, что это работает, как и ожидалось, если я попробую что-то простое, например:

Process proc = Runtime.getRuntime().exec("notepad.exe");

Ответы [ 2 ]

6 голосов
/ 10 апреля 2011

Возможно, вам придется прочитать стандартный вывод процесса или закрыть стандартный ввод, прежде чем он продолжится.Для чтения вывода проблема в том, что буфер может заполниться, блокируя программу;для закрытия ввода проблема заключается в том, что некоторые программы будут пытаться прочитать данные оттуда, если они доступны, в ожидании этого.Один или оба этих трюка, скорее всего, помогут вам разобраться.

2 голосов
/ 10 апреля 2011

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

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.

...