为什么这种从已销毁的 JDialog 中检索字段的方法有效?

Why does this way of retrieving fields from a destroyed JDialog work?

上下文

想要了解如何使用自定义 JDialog 进行重要的、经过验证的数据输入,我搜索并找到了一个 interesting answer 与一个密切相关的问题。

我不明白为什么提供的答案中的代码有效。

我的问题

由于 JDialog 对象在其匿名 ActionListeneractionPerformed() 方法中执行了 setVisible(false)dispose(),当调用者返回时程序流并尝试获取字段,垃圾收集器不应该已经销毁了这些字段吗?

dispose 只会处理对话框持有的本机对等资源。如果您仍然有对相关 JDialog 的引用,它将不符合垃圾回收的条件,因为您仍然有对它的强引用。我假设您仍然有对对话框的引用,否则,您将如何尝试获取由它管理的值...

垃圾回收也不会立即发生...

根据您的链接问题...

FObjectDialog fod = new FObjectDialog(this);
//...
String name = fod.getName();

fod 仍有对 FObjectDialog 的强烈引用。因此,直到 fod 脱离上下文(方法 returns)、被取消引用(fod = null;)或被重新分配,fod(以及扩展的对话框)获胜'有资格进行垃圾收集。