按[X]按钮关闭JFrame将不会调用dispose方法

Mr *_*old 3 java swing jframe

我已经设置了一个像这样的JFrame:

public class XFrame extends JFrame {

public XFrame() {
    setSize(100, 100);
}
@Override
public void dispose() {
    super.dispose();
    System.out.println("Dispose get called");
}

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {

        public void run() {
            XFrame f = new XFrame();
            f.setTitle("Hello World");
            //f.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
            f.setDefaultCloseOperation(EXIT_ON_CLOSE);
            f.setVisible(true);
        }
    });
}
}
Run Code Online (Sandbox Code Playgroud)

我期待的是,当我按下关闭按钮[X]时,将调用dispose方法.但是,只有当DISPOSE_ON_CLOSE设置为DefaultCloseOperation(???)时才会出现这种情况.Java真的让我感到惊讶.如何实现在DefaultCloseOperation值(DISPOSE_ON_CLOSE和EXIT_ON_CLOSE)两种情况下都会调用的方法?

Car*_*icz 5

如果你这样做EXIT_ON_CLOSE的话,很少需要处理,因为当JVM退出时,所有资源都被"处理掉"了.我把"处理"放在引号中,因为在这种自动情况下,该dispose方法显然没有被调用.

请注意,Swing中的公共方法可供调用,并非所有方法都必须由Swing的内部调用.例如,有setSize()setLocation()setBounds()方法-做前2呼叫后者,或者周围的其他方式?它没有定义,所以你不应该假设.

类似地,如果你想在框架关闭时做某事,那么确保它的方法是挂钩WindowListener到框架,并将你的结束动作放入windowClosing().