Функция вызова, когда программа выходит из java

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

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

Ответы

Ответ 1

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

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

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

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

Ответ 2

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

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

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

Ответ 3

Создаете ли вы автономное приложение GUI (т.е. Swing)?

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

Ответ 4

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

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

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

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