为什么在 Swing 应用程序中始终可以访问 JFrame 实例?这不会阻止它被垃圾收集吗?
JFrame frame = new JFrame();
System.out.println(Window.getWindows().length); // says '1'
调用 dispose()
没有帮助。它甚至没有显示。
最佳答案
java.awt.Windows 上没有getWindows 方法,但是有Frame.getFrames() 方法。
但我知道他们两个都用WeakReference来管理这些事情。
基本上这个想法是 Window 和 Frame 类都有一个名为 weakThis 的字段,它是对当前 frame/window 对象的 weakreference。每当需要存储对象时(例如在 appcontext 中),将使用 weakThis 字段代替 this。 (如果您不知道,弱引用不会停止对象的 gc-ing)
编辑:在 1.6 中添加了 Window.getWindows。
关于java - 为什么 Swing JFrame 总是可以访问的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5430207/