Как сохранить параметры приложения перед выходом? - PullRequest
19 голосов
/ 02 марта 2010

Я сделал заявку, и мне нужно сохранить некоторые параметры перед выходом. (Что-то вроде размера окна, ..., которое будет записано в файл.)

Основной кадр установил это:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Как мне сохранить интересующие меня опции? (Перед выходом конечно)

Спасибо!

Ответы [ 4 ]

32 голосов
/ 02 марта 2010

Если вы просто хотите что-то сделать, когда приложение закрывается, вы можете перехватить завершение работы с помощью этого кода:

    Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {

        public void run() {
            // Do what you want when the application is stopping
        }
    }));

Однако это не позволит вам не закрывать окно. Если вам нужно что-то проверить перед выходом, вы можете переопределить событие windowClosing:

addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
        // Do what you want when the window is closing.
    }
});

Обратите внимание, что первое решение - использование ловушки завершения работы - имеет то преимущество, что оно не связано с событием окна и будет выполняться, даже если приложение остановлено другим событием (кроме, конечно, если процесс Java жестоко убит).

5 голосов
/ 02 марта 2010

Может помочь следующее.

  1. Сначала вам нужно прочитать ваш файл свойств. См. Документ

    Properties properties = new Properties();
    try {
      properties.load(new FileInputStream("filename.properties"));
    } catch (IOException e) {
      System.err.println("Ooops!");
    }
    
  2. Во-вторых, добавьте обработчик событий в ваше окно, которое сохранит ваши данные в файле свойств. Все, что вам нужно сохранить, просто положить в экземпляр свойств и сохранить его при выходе

     addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        try {
         properties.store(new FileOutputStream("filename.properties"), null);
        } catch (IOException e) {
        }
      }
    });
    

Вот и все, если я вас правильно понял)

1 голос
/ 02 марта 2010

Вы можете зарегистрировать WindowListener и сохранить свои настройки в методе windowClose.

И конечно же

frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
0 голосов
/ 31 августа 2012

Не уверен, что это относится к вашей ситуации, но это может относиться к другим, кто просматривает эту тему. Мое приложение имеет main () и в конце имеет цикл while (! Shell.isDisposed). Когда приложение запускается, этот цикл идет, и когда приложение закрывается, этот цикл заканчивается, и он падает до того, что когда-либо находится после него в методе main. Именно здесь я проверяю, не загрязнен ли редактор и не изменились ли предпочтения, и сопоставляю их с условиями. Мой метод, прикрепленный к файлу close, удаляет оболочку и вызывает метод closeCurrent (), но если кто-то щелкает значок закрытия окна «x», он попадает сюда, и я снова проверяю, не является ли что-то грязным, и сохраняю, если мне нужно.

while (!shlCpbtool.isDisposed()) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
    }
    // exit
    if(dirty){
        closeCurrent();
    }
...