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

art*_*rxe 20 java processing swing desktop-application

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

主框架设置如下:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Rom*_*las 34

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

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

        public void run() {
            // Do what you want when the application is stopping
        }
    }));
Run Code Online (Sandbox Code Playgroud)

但是,这不允许您不关闭窗口.如果您需要在真正退出之前检查某些内容,可以覆盖该windowClosing事件:

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

请注意,第一个解决方案 - 使用关闭挂钩 - 的优点是它与窗口事件无关,即使应用程序被另一个事件停止也会执行(当然,除非Java进程被残酷地杀死) ).


pon*_*kin 6

可能以下将有所帮助.

  1. 首先,你需要阅读你的属性文件.见文档

    Properties properties = new Properties();
    try {
      properties.load(new FileInputStream("filename.properties"));
    } catch (IOException e) {
      System.err.println("Ooops!");
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 第二个向窗口添加事件处理程序,它会将您的数据保存在属性文件中.您需要保存的所有内容只需放入属性实例并将其存储在退出

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

这就是全部,如果我理解你的正确的话)

  • 请**永远不要**有空的catch块,即使在示例代码中也是如此.至少放一个`e.printStackTrace()`.示例代码具有成为生产代码的恶劣趋势,我们都必须在以后维护它. (11认同)