2015-04-02 5 views
0

Я использую сервер Glassfish для запуска Java-приложения (на Windows 7 64bits, jdk 1.7.0.67). Я пытаюсь запустить шпатлевку из класса. Процесс запускается (я могу увидеть его в менеджере задач окон), но не открывая никаких окон замазки ... Я попробовал другой код, как:Java Runtime: процесс, запускаемый окном, не открывается

Process p = Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL " + "C:\\putty.exe"); 

или

Process p = Runtime.getRuntime().exec("C:\\putty.exe"); 

или

Process p = Runtime.getRuntime().exec(cmd /c start C:\\putty.exe"); 

Менеджер безопасности в стеклянной планете отключен. По умолчанию putty.exe выполняется как администратор. Этот подход аналогичен другим приложениям: cmd.exe или pspade.exe. Если я запускаю код в cmd.exe, запущенном приложением, код хорошо выполняется. У меня больше нет идеи, твоя помощь будет приятной!

+0

для меня ваш код работает. поместите ваш 'putty.exe' в любой другой диск и проверьте. – Prashant

+0

Я положил его на D :, то же самое ... –

+0

См. Также [Когда Runtime.exec() не будет] (http://www.javaworld.com/article/2071275/core-java/when-runtime- exec --- won-t.html) для многих хороших советов по правильному созданию и обработке процесса. Затем проигнорируйте это, ссылаясь на 'exec' и используйте' ProcessBuilder' для создания процесса. Кроме того, разделите аргумент 'String' на аргументы' String [] 'для более надежного анализа путей (среди прочего). –

ответ

0

EDIT

не работает в этом случае, но может помочь в других случаях.

Попробуйте добавить:

try (BufferedReader reader = new BufferedReader(new inputStreamReader(process.getInputStream()));){    
    while (reader.readLine() != null){ 
     // consume the InputStream of the shell command 
    } catch (IOException e) { 
    //might throw an Exception if reader is not closed properly 
    } 

после команды Exec(). Возможно, шпаклевка выводит что-то на консоль, и когда буфер заполнен, Shell прекратит выполнение программы. Поэтому, если InputStream не потребляется должным образом, оболочка будет просто ждать и ничего не делать, кроме процесса.

+0

С помощью этого кода приложение остается в цикле while и никогда не выходит. Но ни одна строка не читается. –

+0

А хорошо стоило попробовать. Это помогло мне, например, при распаковке. –