为什么这种从已销毁的 JDialog 中检索字段的方法有效?
Why does this way of retrieving fields from a destroyed JDialog work?
上下文
想要了解如何使用自定义 JDialog
进行重要的、经过验证的数据输入,我搜索并找到了一个 interesting answer 与一个密切相关的问题。
我不明白为什么提供的答案中的代码有效。
我的问题
由于 JDialog
对象在其匿名 ActionListener
的 actionPerformed()
方法中执行了 setVisible(false)
和 dispose()
,当调用者返回时程序流并尝试获取字段,垃圾收集器不应该已经销毁了这些字段吗?
dispose
只会处理对话框持有的本机对等资源。如果您仍然有对相关 JDialog
的引用,它将不符合垃圾回收的条件,因为您仍然有对它的强引用。我假设您仍然有对对话框的引用,否则,您将如何尝试获取由它管理的值...
垃圾回收也不会立即发生...
根据您的链接问题...
FObjectDialog fod = new FObjectDialog(this);
//...
String name = fod.getName();
到 fod
仍有对 FObjectDialog
的强烈引用。因此,直到 fod
脱离上下文(方法 returns)、被取消引用(fod = null;
)或被重新分配,fod
(以及扩展的对话框)获胜'有资格进行垃圾收集。
上下文
想要了解如何使用自定义 JDialog
进行重要的、经过验证的数据输入,我搜索并找到了一个 interesting answer 与一个密切相关的问题。
我不明白为什么提供的答案中的代码有效。
我的问题
由于 JDialog
对象在其匿名 ActionListener
的 actionPerformed()
方法中执行了 setVisible(false)
和 dispose()
,当调用者返回时程序流并尝试获取字段,垃圾收集器不应该已经销毁了这些字段吗?
dispose
只会处理对话框持有的本机对等资源。如果您仍然有对相关 JDialog
的引用,它将不符合垃圾回收的条件,因为您仍然有对它的强引用。我假设您仍然有对对话框的引用,否则,您将如何尝试获取由它管理的值...
垃圾回收也不会立即发生...
根据您的链接问题...
FObjectDialog fod = new FObjectDialog(this);
//...
String name = fod.getName();
到 fod
仍有对 FObjectDialog
的强烈引用。因此,直到 fod
脱离上下文(方法 returns)、被取消引用(fod = null;
)或被重新分配,fod
(以及扩展的对话框)获胜'有资格进行垃圾收集。