这不会导致内存泄漏,因为现在你无法在收集传感器时删除动作监听器吗?
this.btnClickMe.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
textArea.append("Hello\n");
}
});
这样做会不会更好呢?
this.clickMeButtonActionListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
textArea.append("Hello\n");
}
};
this.btnClickMe.addActionListener(this.clickMeButtonActionListener);
...
@Override
public void dispose() {
this.btnClickMe.removeActionListener(
this.clickMeButtonActionListener);
super.dispose();
}
答案 0 :(得分:2)
没有
您不需要实施处置,通常也不应该。
当btnClickMe被丢弃时,您的匿名侦听器将像其他所有内容一样被垃圾收集,并且不再需要对它进行任何引用,而您无需执行任何操作。
如果监听器是临时的,那么确定,存储它然后在使用removeActionListener逻辑完成它时将其删除。但是没有处置,你甚至不知道何时或是否会被召唤。当您的应用程序不再需要附加监听器时,请执行此操作。
答案 1 :(得分:0)
你的问题是一个很好的例子,"半知识"实际上是一件危险的事情。
您似乎明白Java是垃圾收集的;但另一方面 - 你错过了解它是如何运作的。
因此,简而言之:对象活着,只要它们在查看堆时可以到达。一个匿名的听众只有在其所有者"活着。因此:当你的框架/面板......不再存在时,所有拥有的听众都会死亡。用它也是。因此他们有资格进行垃圾收集。