Как обработать закрытие события приложения в Java? - PullRequest
4 голосов
/ 15 апреля 2009

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

Есть решение? Спасибо!

Ответы [ 2 ]

7 голосов
/ 15 апреля 2009

Вы хотите использовать отключающий крюк:

Runtime.getRuntime().addShutdownHook(theHookThread);

Таким образом, поток будет запущен при завершении работы JVM, подробности см. здесь .

0 голосов
/ 15 апреля 2009

Если под закрытием приложения вы имеете в виду операционную систему, убивающую серверный процесс?

В этой ситуации у сервера нет возможности узнать, что его убивают. Это отбросит существующие соединения.

Если, закрывая приложение, вы предоставляете способ для администратора sys вручную закрыть сервер (возможно, набрав «exit» на консоли сервера). Тогда закрывающим событием будет пользовательское событие, и вам придется кодировать слушателей и уведомлять всех, что сервер выключается. В этом сценарии это возможно.

Попробуйте добавить более подробную информацию о том, как построен ваш сервер или как он работает.

...