我正处于学习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 );
}
}
不仅窗口可见,我可以在该窗口上执行所有操作,如拖动,最大化,最小化等。
答案 0 :(得分:6)
因为EDT现在正在运行。
有关详细信息,请参阅Concurrency in Swing&特别是:
在标准程序中,只有一个这样的线程:调用程序类的
main
方法的线程。
Swing事件处理代码在称为事件派发线程的特殊线程上运行。大多数调用Swing方法的代码也在这个线程上运行。
答案 1 :(得分:6)
JFrame对象未被销毁,因为UI线程或所谓的Event Dispatch Thread具有对它的引用并正在使用它。