Запуск внешнего консольного приложения из Java - PullRequest
1 голос
/ 20 мая 2010

в приложении Java мне нужно запустить внешнее консольное приложение. С окнами все в порядке:

try {
System.out.println("Running...");
    Runtime.getRuntime().exec("notepad.exe");
    System.out.println("End.");
}
catch(Exception e) {
    System.out.println(e.getMessage());
}

успешно запускает блокнот.

Но если я поставлю D:\\MyProg.exe или .bat или даже cmd.exe (что такое PATH, как блокнот), он не будет работать. Без каких-либо исключений. Просто:

Running...
End.

Ответы [ 2 ]

3 голосов
/ 20 мая 2010

Во-первых, скорее всего, Runtime.exec() возвращается асинхронно, так что просто печать "end" всегда будет работать, поскольку вызов exec немедленно возвращается, что вы и видите.

Здесь есть куча других проблем. Я думаю, что происходит, что программы, которые вы вызываете, могут выводить ввод / вывод на стандартный вывод, который вы не можете прочитать, или, возможно, вам нужно дождаться, пока он завершит , прежде чем выйти из процесса Java. Есть отличная статья о различных проблемах с Runtime.exec(), которую вы, вероятно, должны прочитать, она освещает эту и другие проблемы.

0 голосов
/ 20 мая 2010

Это потому, что блокнот помещен в специальную папку, и эта папка существует в переменной Path.

Запустите cmd, используя следующую строку:

Runtime.getRuntime().exec("cmd.exe /c start");

Запустите другое приложение:

Runtime.getRuntime().exec("cmd.exe /c start C:\\path\\to\\app.exe");
...