Вызов функции при завершении работы программы на java

StackOverflow https://stackoverflow.com/questions/63687

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

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

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

Пожалуйста, обратите внимание на предостережения хотя!

Другие советы

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top