2012-03-21 4 views
0

У меня есть интерфейс Swing, когда я нажимаю кнопку, поток создается бесконечно (род while (true) ...).Swing and Threads

Мой вопрос: когда я закрываю основной процесс, автоматически создадут созданные потоки?

+1

Что вы подразумеваете под * «закрыть основной процесс» *? Что-то вроде 'System.exit (0)' или 'frame.setVisible (false)'? (Но, пожалуйста, будьте конкретны.) Обратите внимание, что потоки в графическом интерфейсе Swing часто лучше всего запускаются из таймера Swing 'Timer'. –

ответ

5

Зависит, если потоки вы начали это демон нить или нет, и как вы закроете основной процесс.

Вот relevant documentation из стандартной библиотеки:

Когда виртуальная машина Java запускается, то, как правило, один не-демон поток (который обычно вызывает метод, названный главным из некоторого обозначенного класса). Виртуальная машина Java продолжает выполнять резьбу до любого из следующих не происходит:

  • метод выхода из класса наработки был вызван и диспетчер безопасности разрешил операцию выхода на место.

  • Все потоки, которые не являются потоками демона, умерли, либо возвратившись из вызова метода запуска, либо выбросив исключение, которое распространяется за пределы метода запуска.

Итак, если вы закрыли главный процесс System.exit или с помощью jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) тогда все потоки будут умирать, когда вы закрыли.

Если вы просто пропустите основную нить (поток, выполняющий public static void main), опустите край основного метода, тогда потоки продолжат работать.

1

Да, если он не настроен как нить демона. Вы можете просмотреть инструментальную JVM с помощью инструмента JPS:

jps -l