为什么Swing JFrame始终可以访问?

mil*_*lan 5 java swing jframe

为什么JFrame实例总是在Swing应用程序中可以访问?这不会阻止它被垃圾收集?

JFrame frame = new JFrame();
System.out.println(Window.getWindows().length); // says '1'

通话dispose()无济于事.它甚至没有显示出来.

Sur*_*ran 5

java.awt.Windows上没有getWindows方法,但有一个Frame.getFrames()方法.

但我知道他们都使用WeakReference来管理这些事情.

基本上这个想法是Window和Frame类都有一个名为weakThis的字段,它是对当前帧/窗口对象的弱引用.每当需要存储对象时(例如在appcontext中),使用weakThis字段代替此字段.(如果你不知道的话,弱引用不会阻止对象的gc-ing)

编辑:Window.getWindows在1.6中添加.