21

我已经做了一个应用程序,我需要在退出之前保存一些选项。(像窗口尺寸,...,这将被写入一个文件。)

主框架设置了这个:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

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

谢谢!

4

4 回答 4

36

如果您只想在应用程序关闭时做一些事情,您可以使用以下代码挂钩关闭:

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

于 2010-03-02T07:46:04.553 回答
7

可能以下会有所帮助。

  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) {
        }
      }
    });
    

就是这样,如果我理解你是正确的)

于 2010-03-02T07:45:05.087 回答
2

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

而且当然

frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
于 2010-03-02T07:35:32.623 回答
0

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

while (!shlCpbtool.isDisposed()) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
    }
    // exit
    if(dirty){
        closeCurrent();
    }
于 2012-08-31T14:41:22.720 回答