Есть правила Swing для потока EDT, чтобы нормально завершиться.
Самое главное, чтобы убедиться, что все кадры были расположены.
К сожалению, это может быть не так просто, если вы используете модальные диалоги без родителей, потому что Swing создаст невидимый родительский фрейм для таких диалогов.
В этом случае вам нужно перечислить все кадры (вы можете использовать Frame.getFrames()
для этого) и явно dispose()
их.
Конечно, вы должны убедиться, что Thread
не жив (кроме демонов). Некоторые библиотеки и даже некоторые API из JDK создают потоки, не являющиеся демонами, которые вы должны отключить самостоятельно.
Наконец, и самое главное, не вызывая System.exit () не будет работать в среде Java Web Start (посмотрите на этот вопрос SO , чтобы найти больше информации).
Итак, в заключение я бы посоветовал вам позвонить System.exit()
, потому что вы не всегда знаете, в какой среде будет запущено ваше приложение. Но я бы добавил к этому важный момент: убедитесь, что у вас есть единственная точка, из которой выполняется выход. Вызов его из любого потока будет в порядке.