java - 调用 dispose() 不会关闭 JFrame

标签 java swing

我是 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);
    }
}

最佳答案

您将在此处创建两个 JFrame 对象,一个您在 (fr) 上设置了 defaultCloseOperation,另一个您尝试对其调用 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);
    }
}

关于java - 调用 dispose() 不会关闭 JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30415733/

相关文章:

java - 连接链表的字符串

java - JTable 的实时排序

java - 组合盒,自动填充。 java

java - 为什么我的 JLabel 网格不能正常工作?

Java for 循环[方法]

java - Spring异常处理生产与开发

java - 从 Java 构造函数调用实例方法是好是坏?

java - 这种 Java 加密方法的等效 PHP 解密是什么?

java - 如何在 java 中填充或重新加载 jtree

java - Swing 时间选择器