Java: обрабатывать выход из системы или завершение работы в Windows и Linux - PullRequest
5 голосов
/ 27 января 2009

Есть ли способ для приложения Java GUI реагировать на события завершения работы системы или выхода из системы, кроме использования JNI? (В Windows JNI будет использовать WM_QUERYENDSESSION, в Linux?)

Метод должен позволять программе запрашивать у пользователей сохранение и т. Д., А затем продолжать процесс выхода из системы.

Ответы [ 4 ]

4 голосов
/ 27 января 2009

Насколько я знаю, в Java нет способа отловить события завершения работы системы или выхода из системы.

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

AWT WindowAdapter также имеет событие windowClosing, которое вы можете переопределить и подключить к окну, которое хотите отслеживать. Свинг наследует это; Я верю, что SWT делает то же самое. Помните, что вы ДОЛЖНЫ избавиться от окна вручную, если переопределите это событие!

Я полагаю, что MS Windows будет запускать эти события во время закрытия. Я полагаю, что SIGTERM в Linux / UNIX делает то же самое, хотя Linux вскоре после этого будет SIGKILL, если это произойдет во время завершения работы.

1 голос
/ 27 января 2009

Вы можете запланировать запуск потока при завершении работы JVM - см.

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runtime.html#addShutdownHook(java.lang.Thread)

1 голос
/ 27 января 2009

Я думаю, что Runtime.getRuntime (). AddShutdownHook должен обеспечить необходимую вам функциональность.

0 голосов
/ 27 января 2009

Это не отвечает на вопрос, но касается его части.

В сеансе Unix GUI я считаю, что правильным способом обработки события выхода из системы является сохранение документа во временный файл и сохранение информации в состоянии сеанса. Во время восстановления сеанса программа может перезагрузить временный файл и продолжить работу с того места, где он остановился. Не нужно спрашивать пользователя о сохранении или нет.

Хотелось бы, чтобы больше программного обеспечения делало прозрачное сохранение и восстановление сессии. Слишком много программ вновь открываются с пустыми окнами документов, потому что используемая среда графического интерфейса делает так много, но остальная часть работы не была проделана для обработки какого-либо значимого состояния программы.

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