2008-09-15 4 views
12

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

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

ответ

32

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

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

В основном это эквивалентно тому, что попробовать {} наконец {} блок вокруг всей вашей программы, и в основном включает в себя то, что в наконец, блокировать.

Обратите внимание на то, что caveats!

+1

Где должен быть закрытие крюк расположен? У меня есть программа, и мне тоже нужно сохранить некоторые данные. Я использую модель MVC, но я не знаю, где разместить этот крючок. Спасибо – frank17 2016-04-10 16:33:48

10

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

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

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

0

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

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

0

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

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

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

Вот эталонная реализация: