我做了一个应用程序,我需要在退出之前保存一些选项(有点像窗的尺寸,...,将要在文件中写的)如何在退出前保存应用程序选项? 。
主框架已将此:
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
我该如何保存我感兴趣的选项?(在退出课程前)
谢谢!
我做了一个应用程序,我需要在退出之前保存一些选项(有点像窗的尺寸,...,将要在文件中写的)如何在退出前保存应用程序选项? 。
主框架已将此:
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
我该如何保存我感兴趣的选项?(在退出课程前)
谢谢!
如果你只是想在应用程序关闭时做一些事情,你可以使用t他的代码:
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.
}
});
注意,第一个解决方案 - 使用shutdown钩 - 有它不涉及到一个窗口事件的优势,并会即使应用程序被另一个事件阻止(当然,除非Java进程被残忍地杀死),它也会被执行。
您可以注册WindowListener并将您的选项保存在windowClose方法中。
当然
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
,并可能是下列会有所帮助。
首先你需要阅读你的财产文件。 See doc
Properties properties = new Properties();
try {
properties.load(new FileInputStream("filename.properties"));
} catch (IOException e) {
System.err.println("Ooops!");
}
第二个事件处理程序添加到您的窗口,这将节省物业file.All你的数据,你需要保存只是把性能实例并将其存储在退出
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
try {
properties.store(new FileOutputStream("filename.properties"), null);
} catch (IOException e) {
}
}
});
就是这样,如果我理解你是正确的)
请不要**有空的catch-blocks,即使在示例代码中。在那里放置至少一个'e.printStackTrace()'。示例代码具有成为生产代码的恶劣趋势,我们都必须稍后再维护。 – 2010-03-02 07:48:45
其实这不是我的),只是快速复制/过去。但你是完全正确的。 – ponkin 2010-03-02 08:08:10
不确定这适用于您的情况,但它可能会导致其他人冲浪到此线程。 我的应用程序有一个main(),最后有while(!shell.isDisposed)循环。 当应用程序运行该循环时,并且当应用程序关闭时,该循环结束,并且它在主方法中落在后面。 这是我检查编辑器是否肮脏,如果首选项已更改并处理条件的地方。 我的方法附加到文件关闭配置壳和调用closeCurrent()方法,但如果有人点击'x'关闭窗口图标它落在这里,我再次检查是否有脏东西,如果我需要保存。
while (!shlCpbtool.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
// exit
if(dirty){
closeCurrent();
}
当我使用构造函数Thread()时,保存在Thread.run()方法中的文件已损坏。但是当我使用这个例子中建议的构造函数Thread(Runnable)时,文件被正确保存。我很幸运,还是构造函数类型很重要? – ka3ak 2013-03-17 13:22:55
这在处理小应用程序中也非常有用。退出时,void stop()并不总是被调用,而这种方法是。谢谢! :D – Daan 2013-10-30 16:26:30
除了使用Processing IDE并通过“停止”按钮退出草图时,在这种情况下,即使此方法似乎也不起作用。 – rednoyz 2014-02-11 08:00:36