2013-06-26 1 views
-1

Я бег этого кода:среды выполнения Выполнения выражений команды обыкновения конца

Runtime rt = Runtime.getRuntime(); 
rt.exec("explorer"); 
rt = null; 

прогоны коды и сделать работу, но программа Dont прекратить - это красный свет (с помощью Eclipse IDE) все еще находится на означая программа не закончилась.

Что может быть проблема>

+0

Как насчет использования отладчика? – mre

+3

Что произойдет, если вы закроете экземпляр проводника, который он начнет? – DaveH

+0

Разве процесс «исследователя» не разворачивается из процесса Java? Java будет работать до завершения проводника. –

ответ

4

Как правило, назначение нуль-то в Java не делает его остановить или уйти. В лучшем случае это может сделать все, что недоступно ... и, следовательно, иметь право на сбор мусора в какой-то момент в будущем.

Если вы хотите остановить внешний процесс, вам необходимо позвонить destroy() на объект Process. Это попытается принудительно прекратить внешний дочерний процесс. Будет ли это успешным, будет зависеть от привилегии приложения. (Будет ли это прекратить все дочерних процессов потомков зависит от платформы ...)


Вы прокомментировали следующим образом:

«Уничтожить завершить программу, но и убить процесс, который запускает созданный. ..»

Ну, если вы не хотите, чтобы убить процесс, и просто хочу знать, что происходит, то объяснение, что„красный свет“означает, что дочерний процесс все еще бежит г. Если вы хотите, чтобы «красный свет» исчез, не убивая дочерний процесс, вам, вероятно, не повезло.

Я предполагаю, что другая возможность заключается в том, что вы действительно хотите, чтобы дочерний процесс «отделился» от приложения Java. Я не знаю, как вы могли бы сделать это в Windows, но в Unix/Linux вы бы запустить его так:

/bin/bash -c "/usr/bin/nohup /usr/bin/firefox &" 

& говорит работать в фоновом режиме, а nohup отсоединяется стандартный ввод/вывод/ошибка.

1

У меня возникнет соблазн переместить вызов runtime.exec в отдельный объект Runnable. Когда вы создаете Thread для запуска этой runnable, установите его как демон. JVM должен закрыться, но оставим поток демона.

0

Так Exec из Java запустит исследователь с из заканчивающегося ...

Одно решение просто сказать Java, чтобы запустить пакетный файл, который запустить Explorer.