Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在退出前保存应用程序选项?_Java_Swing_Desktop Application_Processing - Fatal编程技术网

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

Java 如何在退出前保存应用程序选项?,java,swing,desktop-application,processing,Java,Swing,Desktop Application,Processing,我已经制作了一个应用程序,我需要在退出之前保存一些选项。(类似于窗口尺寸,…,将写入文件。) 主框架设置了以下内容: frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 如何保存我感兴趣的选项?(当然在退出之前) 谢谢 您可以在windowClose方法中注册并保存选项 当然 frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 也许以下几点会有所帮助 首先,您需要读取您

我已经制作了一个应用程序,我需要在退出之前保存一些选项。(类似于窗口尺寸,…,将写入文件。)

主框架设置了以下内容:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
如何保存我感兴趣的选项?(当然在退出之前)

谢谢

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

当然

frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

也许以下几点会有所帮助

  • 首先,您需要读取您的属性文件

  • 第二,将事件处理程序添加到您的窗口中,这将把您的数据保存在属性文件中

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

  • 仅此而已,如果我理解您的意思是正确的)

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

        Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
    
            public void run() {
                // Do what you want when the application is stopping
            }
        }));
    
    但是,这将不允许您不关闭窗口。如果在真正退出之前需要检查某些内容,可以覆盖该事件:


    请注意,第一个解决方案(使用shutdown hook)的优点是它与窗口事件无关,即使应用程序被另一个事件停止(当然,如果Java进程被残忍地杀死,则除外)也会执行该解决方案。

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

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

    请不要有空的catch块,即使在示例代码中也不要。在其中至少放置一个
    e.printStackTrace()
    。示例代码有成为生产代码的讨厌趋势,我们以后都必须维护它。实际上这不是我的代码),只是快速复制/过去。但是你完全正确。当我使用构造函数Thread()时,保存在Thread.run()方法中的一个文件已损坏。但是当我使用本例中建议的构造函数线程(Runnable)时,文件被正确保存。我是幸运的还是构造函数类型很重要?这在处理小程序时也非常有用。退出时,不总是调用void stop(),而此方法是。谢谢DExcept当您使用处理IDE并通过“停止”按钮退出草图时,在这种情况下,甚至此方法似乎都不起作用。是@rednoyz,如果您也关闭计算机,它将不起作用;o) 在这种情况下,您没有捕获关机事件的任何解决方案。。。
    addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            // Do what you want when the window is closing.
        }
    });
    
    while (!shlCpbtool.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
        // exit
        if(dirty){
            closeCurrent();
        }