Вызов функции при выходе из программы в Java - PullRequest
12 голосов
/ 15 сентября 2008

Я хотел бы сохранять настройки программы каждый раз, когда пользователь выходит из программы. Поэтому мне нужен способ вызова функции, когда пользователь выходит из программы. Как мне это сделать?

Я использую Java 1.5.

Ответы [ 4 ]

32 голосов
/ 15 сентября 2008

Вы можете добавить обработчик отключения к вашему приложению, выполнив следующие действия:

Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
    public void run() {
        // what you want to do
    }
}));

Это в основном эквивалентно наличию блока try {} finally {} вокруг всей вашей программы и в основном охватывает то, что находится в блоке finally.

Обратите внимание на предостережения , хотя!

10 голосов
/ 15 сентября 2008

Добавление ловушки отключения addShutdownHook (java.lang.Thread) , вероятно, то, что вы ищете. Однако при таком подходе есть проблемы:

  • вы потеряете изменения, если программа прерывается неконтролируемым образом (то есть, если она убита)
  • вы потеряете изменения в случае ошибок (отказано в разрешении, переполнение диска, сетевые ошибки)

Так что может быть лучше сохранить настройки немедленно (возможно, в дополнительной ветке, чтобы избежать времени ожидания).

0 голосов
/ 16 сентября 2008

Использование Runtime.getRuntime (). AddShutdownHook (), безусловно, способ сделать это - но если вы пишете приложения Swing, я настоятельно рекомендую вам взглянуть на JSR 296 (Swing Application Framework)

Вот хорошая статья по основам: http://java.sun.com/developer/technicalArticles/javase/swingappfr/.

Эталонная реализация JSR обеспечивает тот тип функций, который вы ищете на более высоком уровне абстракции, чем добавление перехватчиков завершения работы.

Вот эталонная реализация: https://appframework.dev.java.net/

0 голосов
/ 15 сентября 2008

Вы создаете автономное приложение с графическим интерфейсом (например, Swing)?

Если это так, вам следует подумать о том, как вы предоставляете пользователям варианты выхода из приложения. А именно, если будет меню «Файл», я ожидаю, что будет пункт «Выход». Кроме того, если пользователь закроет последнее окно в приложении, я также ожидаю, что оно выйдет из приложения. В обоих случаях он должен вызывать код, который обрабатывает сохранение настроек пользователя.

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