Функция вызова, когда программа выходит из 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/