3

我正处于学习 Java 的初学者阶段。在我到目前为止阅读的所有文档中,都提到 Java 使用安全引用来访问对象而不是内存指针。而且当一个方法返回时,它的局部范围的变量变得有资格进行垃圾收集。

那么为什么在下面的代码中,在 createFrame 方法返回后,JFrame 对象没有与窗口一起被销毁?

import javax.swing.*;

public class HelloJava {
    public static void main( String[] args ) {
        createFrame();
    }

    private static void createFrame() {
        JFrame frame = new JFrame( "Hello, Java!" );
        JLabel label = new JLabel( "Hello, Java!", JLabel.CENTER );
        frame.getContentPane().add( label );
        frame.setSize( 300, 300 );
        frame.setVisible( true );
    }
}

不仅窗口是可见的,我还可以在该窗口上执行所有操作,例如拖动、最大化、最小化等。

4

2 回答 2

6

因为 EDT 现在正在运行。

有关更多详细信息,请参阅Swing 中的并发,尤其是:

  • 初始线程

    在标准程序中,只有一个这样的线程:调用main程序类方法的线程。

  • 事件调度线程

    Swing 事件处理代码在称为事件分派线程的特殊线程上运行。大多数调用 Swing 方法的代码也在这个线程上运行。

于 2012-09-02T16:03:45.050 回答
6

JFrame 对象没有被销毁,因为 UI 线程或所谓的事件调度线程对它有一个引用并且正在积极地使用它。

于 2012-09-02T16:04:26.497 回答