Обходной путь для несовместимой JVM, не отправляющей события WindowClosing - PullRequest
0 голосов
/ 13 октября 2011

Apple JVM в различных версиях OS X, по-видимому, была сломана из-за того, что они не генерируют событие WindowClosing, когда они должны (например, если вы закрываете основной JFrame приложения, нажимая кнопку закрытия).

(в последних обновлениях Apple Java вы можете установить свойство, заставляющее генерировать событие, но это не то, что я ищу)

Моя проблема проста: я 'Я хотел бы показать «подсказку», когда пользователь закрывает приложение.Однако я не могу (из-за того, что событие не генерируется) обнаружил, что пользователь закрыл окно.

Поэтому я подумал, что мог бы использовать хук отключения:

Runtime.getRuntime().addShutdownHook(...)

Однако, очевидно, создаваяJFrame из ловушки завершения работы кажется проблематичным: это похоже на то, что EDT уже исчез, когда вызывается ловушка отключения.

Я пробовал несколько вещей, и, похоже, ничто не имеет смысла: например, мой «Tip» JFrame остается без измененийсерый (несмотря на то, что он работает нормально, когда вызывается из любого места, кроме хука отключения) или программа закрывается немедленно.Я пытался использовать защелку и ждать защелки от крюка отключения, но похоже, что EDT там больше не было.

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

Кто-нибудь когда-нибудь пытался создать окно из ловушки отключения и вызывать вещи в EDT, и есть ли какие-либо ошибки, о которых нужно знать?(помните, что я не могу надежно ловить события закрытия окна в OS X из-за известных очень давних ошибок Apple VM).

1 Ответ

1 голос
/ 13 октября 2011

Если окно действительно закрывается, а приложение останавливается, тогда что-то вызывает метод JFrame.dispose ().перезапишите это и добавьте туда свой код.

в противном случае вы можете добавить поток демона, который слушает закрытый метод в приемнике окна, демон может добавить всплывающую подсказку и затем удалить окно.вы можете отложить удаление до тех пор, пока подсказка не будет готова.

Я никогда не слышал об этой ошибке, но теперь ситуация может только улучшиться, когда яблоко не выпускает свои собственные jdk.

...