Попробуйте, yourFrame.setCloseOperation(JFrame.EXIT_ON_CLOSE)
.
Причина, по которой он продолжает работать, состоит в том, что так называемый поток диспетчеризации событий продолжает работать в фоновом режиме, и, пока у вас запущены потоки, не являющиеся демонами, приложение не будет завершено. Из документов темы:
Когда запускается виртуальная машина Java, обычно существует один поток, не являющийся демоном (который обычно вызывает метод с именем main некоторого назначенного класса). Виртуальная машина Java продолжает выполнять потоки, пока не произойдет одно из следующих событий:
- Вызван метод выхода класса Runtime, и менеджер безопасности разрешил выполнение операции выхода.
- Все потоки, которые не являются потоками демонов, умерли, либо возвращаясь из вызова метода run, либо выбрасывая исключение, которое распространяется за пределы метода run.
Это не создание JFrame, которое запускает "gui-thread". Этот поток запускается, когда кадр становится видимым, и, возможно, ему нужно отправлять события.