2010-03-02 43 views
16

我做了一个应用程序,我需要在退出之前保存一些选项(有点像窗的尺寸,...,将要在文件中写的)如何在退出前保存应用程序选项? 。

主框架已将此:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

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

谢谢!

回答

28

如果你只是想在应用程序关闭时做一些事情,你可以使用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进程被残忍地杀死),它也会被执行。

+0

当我使用构造函数Thread()时,保存在Thread.run()方法中的文件已损坏。但是当我使用这个例子中建议的构造函数Thread(Runnable)时,文件被正确保存。我很幸运,还是构造函数类型很重要? – ka3ak 2013-03-17 13:22:55

+0

这在处理小应用程序中也非常有用。退出时,void stop()并不总是被调用,而这种方法是。谢谢! :D – Daan 2013-10-30 16:26:30

+0

除了使用Processing IDE并通过“停止”按钮退出草图时,在这种情况下,即使此方法似乎也不起作用。 – rednoyz 2014-02-11 08:00:36

1

您可以注册WindowListener并将您的选项保存在windowClose方法中。

当然

frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 
4

,并可能是下列会有所帮助。

  1. 首先你需要阅读你的财产文件。 See doc

    Properties properties = new Properties(); 
    try { 
        properties.load(new FileInputStream("filename.properties")); 
    } catch (IOException e) { 
        System.err.println("Ooops!"); 
    } 
    
  2. 第二个事件处理程序添加到您的窗口,这将节省物业file.All你的数据,你需要保存只是把性能实例并将其存储在退出

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

就是这样,如果我理解你是正确的)

+11

请不要**有空的catch-blocks,即使在示例代码中。在那里放置至少一个'e.printStackTrace()'。示例代码具有成为生产代码的恶劣趋势,我们都必须稍后再维护。 – 2010-03-02 07:48:45

+0

其实这不是我的),只是快速复制/过去。但你是完全正确的。 – ponkin 2010-03-02 08:08:10

0

不确定这适用于您的情况,但它可能会导致其他人冲浪到此线程。 我的应用程序有一个main(),最后有while(!shell.isDisposed)循环。 当应用程序运行该循环时,并且当应用程序关闭时,该循环结束,并且它在主方法中落在后面。 这是我检查编辑器是否肮脏,如果首选项已更改并处理条件的地方。 我的方法附加到文件关闭配置壳和调用closeCurrent()方法,但如果有人点击'x'关闭窗口图标它落在这里,我再次检查是否有脏东西,如果我需要保存。

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