0

我正在用 Java (J2ME) 构建一些 GUI,并且怀疑避免与 actionListeners 相关的资源/内存泄漏的最佳实践是什么。

假设我有一个类对象,它有一个添加了 actionListener 的成员变量。我是否需要在对象超出范围之前显式删除此 actionListener?通过不删除 actionListener,当 MyPanel 类对象超出范围时,我会创建内存/资源泄漏吗?

public class MyPanel implements ActionListener
{

    private LabelButton _button;

    public MyPanel()
    {
        _button.addActionListener(this);
    }

    ... 
}
4

2 回答 2

3

使用getListeners/getActionListeners可以获得在指定元素上注册的所有监听器,使用 / 可以removeActionListener从元素中移除监听器

例子:

for(ActionListener act : buttonToBeFreedFromListeners.getActionListeners()) {
    buttonToBeFreedFromListeners.removeActionListener(act);
}

请注意:只要您不保存对在您的元素中注册的侦听器的引用,GarbageCollector 将在拾取元素时拾取侦听器,因为它们具有对它的唯一引用。

于 2013-05-24T09:28:21.140 回答
-1

我认为您不需要显式删除,java 在大多数情况下都会处理,我现在要做的就是不用担心它,如果内存泄漏,那么您可以使用专门的软件,例如JProfiler

于 2013-05-24T09:13:13.510 回答