关于在main方法中覆盖GUI的run()方法

时间:2012-02-29 15:24:15

标签: java multithreading user-interface runnable

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

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类。我假设如果我将printList()放在} catch (FileNotFoundException ex) {之前它应该可以工作,最后将我的列表打印到文件中,但事实并非如此。如果你能帮助我并解释为什么当然_我会很高兴。

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

你需要

  • 将默认关闭操作更改为JFrame.DO_NOTHING_ON_CLOSE(如果窗口是JFrame)
  • 将WindowListener添加到顶级窗口
  • 监听窗口关闭事件,调用方法
  • 然后最终使用适当的退出代码退出JVM(如果没有错误,通常为0)。

答案 2 :(得分:2)

如果您希望在Java VM关闭时运行某些东西,那么您应该看看

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

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

请阅读here以获取更多信息。

如果要在JFrame关闭时关闭Programm(并关闭Java VM),也应该设置Window的DefaultCloseOperation。

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

这就是我想你所要求的。希望这会有所帮助。