Ответ 1
Следующий документ от Oracle/Sun пролил свет на проблему: Проблемы с AWT Threading
[...]
До 1.4 вспомогательные потоки никогда не прерывались.
Начиная с 1.4, поведение изменилось в результате исправления для 4030718. В текущей реализации AWT завершает все свои вспомогательные потоки, позволяя приложению выйти чисто, когда выполняются следующие три условия:
- Нет отображаемых компонентов AWT или Swing.
- В собственной очереди событий нет встроенных событий.
- В java EventQueues нет событий AWT.
Поэтому автономное приложение AWT, которое хочет выйти из строя без вызова System.exit, должно:
- Убедитесь, что все компоненты AWT или Swing не отображаются, когда приложение заканчивается. Это можно сделать, вызвав Window.dispose на всех верхних уровнях Windows. См. Frame.getFrames....
- Убедитесь, что ни один из методов прослушивателей событий AWT, зарегистрированных приложением с любым компонентом AWT или Swing, не может работать в бесконечном цикле или вешать бесконечно. Например, метод прослушивания AWT, инициированный некоторым событием AWT, может отправлять новое событие AWT того же типа в EventQueue. Аргумент в том, что методы прослушивателей событий AWT обычно выполняются на вспомогательных потоках.
[...]