语境
想学习如何使用定制的JDialog
进行非平凡的,经过验证的数据输入,我搜索并找到了一个与紧密相关的问题的interesting answer。
我不明白的是为什么提供的答案中的代码有效。
我的问题
由于JDialog
对象已在其匿名setVisible(false)
的dispose()
方法中执行了actionPerformed()
和ActionListener
,因此在调用者返回程序流并尝试获取字段时,不应该将垃圾回收器已经摧毁了这个领域?
最佳答案
dispose
将只处理该对话框保留的本机对等资源。如果您仍然有问题的JDialog
引用,则由于您仍然对其有很强的引用,因此它不符合垃圾回收的条件。我假设您仍然对该对话框有引用,因为否则,您将如何尝试获取该对话框所管理的值...
而且垃圾收集不会立即发生...
根据您的链接问题...
FObjectDialog fod = new FObjectDialog(this);
//...
String name = fod.getName();
仍然通过
FObjectDialog
强烈引用fod
。因此,直到fod
脱离上下文(该方法返回),被取消引用(fod = null;
)或被重新分配之前,fod
(以及带有扩展名的对话框)将不符合垃圾回收的条件。