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