有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java调用dispose()不会关闭JFrame

我是Swing新手,一直在编写一个应该显示JFrame的非常简单的应用程序。我追踪到下面的代码

窗口不会关闭,JVM将永远运行,必须通过单击X关闭窗口。如果改用JFrame fr = new JFrame("Test"),dispose方法将完成其工作

在这里调用dispose()时,为什么JFrame不关闭,要怎么做才能实现

import javax.swing.JFrame;

public class HelloWorld {

public static void main(String[] args) {

    JFrame fr = new Canvas("Test");
    fr.setSize(100, 100);
    fr.setVisible(true);
    System.out.println("Test");
    fr.dispose();
    }
}


class Canvas extends JFrame {

Canvas(String title) {
    JFrame fr = new JFrame(title);
    fr.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    fr.setVisible(true);
    }
}

共 (1) 个答案

  1. # 1 楼答案

    您在这里创建了两个JFrame对象,一个是您将defaultCloseOperation设置为on(fr),另一个是您尝试调用dispose的对象,因此事情不起作用是有道理的。而是只创建一个对象。去掉fr变量。所以改变这个:

    class Canvas extends JFrame {
    
        Canvas(String title) {
            JFrame fr = new JFrame(title);
            fr.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            fr.setVisible(true);
        }
    }
    

    为此:

    class Canvas extends JFrame {
    
        Canvas(String title) {
            super(title);
            // JFrame fr = new JFrame(title);
            setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            setVisible(true);
        }
    }