我已经创建了一个应用程序,我需要在退出之前保存一些选项。(类似于窗口维度,......,将写入文件中。)
主框架设置了这个:
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
如何保存我感兴趣的选项?(在退出之前)
谢谢!
答案 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)
以下可能会有所帮助。
首先,你需要阅读你的属性文件。 See doc
Properties properties = new Properties();
try {
properties.load(new FileInputStream("filename.properties"));
} catch (IOException e) {
System.err.println("Ooops!");
}
第二次向您的窗口添加事件处理程序,它将您的数据保存在属性文件中。您需要保存的所有内容只需放入属性实例并将其存储在退出
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
try {
properties.store(new FileOutputStream("filename.properties"), null);
} catch (IOException e) {
}
}
});
就这一切,如果我理解你的正确的话)
答案 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();
}