2012-02-29 92 views
1

问题是当我关闭我的GUI窗口时我想运行最后一个方法(例如printList()),但我无法做到这一点。这是我的主要方法关于覆盖主要方法中的GUI的run()方法

public static void main(String args[]) { 

    /* Create and display the form */ 
    java.awt.EventQueue.invokeLater(new Runnable() { 

     @Override 
     public void run() { 
      try { 
       patientTest2 screen = new patientTest2(); 
       screen.setVisible(true); 
       screen.setResizable(false); 
      } catch (FileNotFoundException ex) { 
       Logger.getLogger(patientTest2.class.getName()).log(Level.SEVERE, null, ex); 
      } 
     } 

    }); 

patientTest2是我的JFrame类。我假设如果我在} catch (FileNotFoundException ex) {之前放printList()它应该工作,并最终将我的列表打印到一个文件,但它不。如果你能帮助我解释为什么,我会很高兴。

回答

3

您应该添加一个将WindowAdapter扩展到您的框架的侦听器,并覆盖方法windowClosing(WindowEvent e)。在这种方法中,您可以在窗口关闭之前调用您想要调用的任何方法。

+0

它工作,我感到非常愚蠢因为我记得我添加windowsClosed方法,它没有工作,所以我没有尝试windowsClosing。顺便谢谢你的帮助:) – quartaela 2012-02-29 15:32:26

3

您需要

  • 改变默认的关闭操作JFrame.DO_NOTHING_ON_CLOSE(如果该窗口是一个JFrame)
  • 一个的WindowListener添加到您的顶层窗口
  • 监听窗口关闭事件,呼吁您的方法
  • 然后最后退出带有适当退出代码的JVM(如果没有错误,通常为0)。
2

如果你想拥有,当你的Java虚拟机被关闭运行的东西,那么你应该看看

Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { 

     @Override 
     public void run() { 
      //The stuff you want to do at shutdown. 
     } 
    })); 

请阅读here了解更多信息。

如果您想在JFrame关闭时关闭程序(并关闭Java VM),还应该设置Window的DefaultCloseOperation。

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

这是我想你在问什么。希望这可以帮助。

+0

+1关闭挂钩。最好链接到最新版本的JavaDocs。我编辑了您的答案以指向J2SE 7.有关获取最新文档链接的提示,请参见[优点2](http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7090875) 。如果你不同意,请回滚。否则,为RFE投票。 ;) – 2012-02-29 16:07:41