语境

想学习如何使用定制的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(以及带有扩展名的对话框)将不符合垃圾回收的条件。

09-19 14:18