退出前如何保存应用程序选项?

时间:2010-03-02 07:32:05

标签: java swing desktop-application processing

我已经创建了一个应用程序,我需要在退出之前保存一些选项。(类似于窗口维度,......,将写入文件中。)

主框架设置了这个:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

如何保存我感兴趣的选项?(在退出之前)

谢谢!

4 个答案:

答案 0 :(得分:32)

如果您只想在应用程序关闭时执行某些操作,可以使用以下代码挂钩关闭:

    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进程除外)被残忍地杀死了。

答案 1 :(得分:5)

以下可能会有所帮助。

  1. 首先,你需要阅读你的属性文件。 See doc

    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) {
        }
      }
    });
    
  3. 就这一切,如果我理解你的正确的话)

答案 2 :(得分:1)

您可以注册WindowListener并在windowClose方法中保存您的选项。

当然

frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

答案 3 :(得分:0)

不确定这适用于您的情况,但也可能适用于浏览此主题的其他人。 我的应用程序有一个main(),最后有while(!shell.isDisposed)循环。 当应用程序运行时,循环正在进行,并且当应用程序关闭时,循环结束并且它在主方法中下降到之后的循环。 这是我检查编辑器是否脏,以及首选项是否已更改并处理条件的地方。 附加到文件close的我的方法处理shell并调用closeCurrent()方法但是如果有人点击'x'关闭窗口图标它会落到这里,我再次检查是否有任何东西是脏的并保存,如果我需要。

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