2013-06-23 4 views
1

Я заметил, что если установлено setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE), закрытие фрейма завершит его процесс в диспетчере задач, но если я реализую WindowListener и вручную удалю() фрейм, Process останется ... вероятно, потому, что в новый Runnable() у меня есть что-то вроде этого:dispose() не то же самое, что setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE)

new Runnable() { 
    void run() { 
    Jsch tunnel=new Jsch(); 
    JFrame frame=new JFrame(); 
    frame.addWindowListener(new WindowListener() { frame.dispose(); }); // imagine that this is legal 
    frame.setVisible(true); 
    } 
} 

Любой человек может сказать мне, как вручную закончить процесс, созданный каким-либо приложением?

+0

'вероятно, потому что в новом Runnable() у меня есть что-то вроде этого:' - correct. Команда dispose() завершит процесс, если вы удалите последнее окно, созданное приложением. Но поскольку вы закрываете один кадр и открываете другое, задача Java все еще работает. 'как вручную завершить процесс, созданный некоторым приложением?' - Не уверен, что вы ожидаете, потому что процесс все еще запущен из-за нового фрейма. Возможно, вы можете использовать класс ProcessBuilder для запуска нового процесса, чтобы старый процесс мог закончиться. Однако новый процесс все равно будет отображаться в диспетчере задач, я бы предположил. – camickr

+0

Момент, вы рассматриваете Jsch как фрейм ... потому что я не понимаю, для какого «нового кадра» вы говорите в последнем ответе ... – jovanMeshkov

+0

Зависит от самого процесса. Например, если у вас есть что-то вроде таймера качания, лучший способ остановить его - использовать 'WindowListener' (вызывая метод' stop' в overriden 'windowClosed method'). Кстати, лично я всегда использую DISPOSE_ON_CLOSE как операцию закрытия по умолчанию. Просто чтобы все было в безопасности. –

ответ

3

От API docs.

  • EXIT_ON_CLOSE (определено в JFrame): Выход из приложения, используя метод выхода системы. Используйте это только в приложениях.

Таким образом, чтобы заставить вызов выхода System.exit(0);.

Когда все окна верхнего уровня расположены, Thread Dispatch Thread AWT может быть отключен (при необходимости может быть создан новый). Когда в процессе не осталось нить-демона, он выйдет.

+0

Спасибо, именно то, что мне нужно! – jovanMeshkov