Нужно ли явно вызывать System.exit () в приложении Webstart?

Недавно я конвертировал приложение Swing в Webstart. Процесс был довольно простым, но я обнаружил, что после закрытия всех окон JVM моего приложения не завершается. Дамп потока показал, что есть пара потоков, не являющихся демонами, в частности, Swing EDT, AWT и несколько потоков, связанных с веб-сайтами.

Фактическая используемая стратегия заключается в том, что каждое окно увеличивает счетчик при его создании и уменьшает его при закрытии. Операция закрытия по умолчанию - DISPOSE_ON_CLOSE. Когда счетчик достигает нуля, я останавливаю все пулы потоков и освобождаю все ресурсы JNI.

Когда я запустил приложение из bat-файла (те же JAR-файлы), оно нормально работало, когда все окна были закрыты, поэтому я решил, что проблема как-то связана с Webstart.

Теперь вопросы:

Кто-нибудь может сказать мне, что именно происходит? Почему Webstart оставляет зомби-JVM?Есть ли способ освободить ресурсы Webstart явно, не останавливая JVM?У меня всегда было мнение, что вызов System.exit () поощряет неаккуратную практику не высвобождать ваши ресурсы и полагаться на то, что ОС будет убирать за вами (что может привести к неприятным сюрпризам, если вы повторно используете код позже) ... я что-то пропустил?

Смотрите такжедополнительный вопрос для определения, было ли приложение запущено Webstart.

Ответы на вопрос(5)

Ваш ответ на вопрос