使用自定义Java对象回调后,对象仍在内存中

时间:2013-02-28 15:43:53

标签: java matlab custom-controls

我有一个内存泄漏问题。 我正在创建一个包含在MATLAB类中的jLabel对象。 我正在使用所有set / gets的句柄来尝试防止问题和内存泄漏。

我正在使用此代码为jLabel设置MouseExitedCallback。这是班级的一种方法:

function SetMouseExitedCallback (obj, exitcallback)
    set (obj.hLabel, 'MouseExitedCallback', exitcallback)
end

从另一个实际包含MouseExitedCallback代码的类调用此方法。 在那个类中,它被称为:

obj.tooltip.SetMouseExitedCallback (@(src, event)obj.MouseExited);

我得到的问题是如果我添加最后一行,如果我尝试编辑项目中的文件,它会告诉我jLabel类仍然在内存中。 我该怎么做才能防止这种情况发生?

1 个答案:

答案 0 :(得分:0)

首先我的想法是

obj.tooltip.SetMouseExitedCallback ('');

它在delete(析构函数)方法中。这没用,因为析构函数从未被调用过。实际上析构函数也从未被调用过另一个类,即定义了实际的MouseExited()回调的类。

最后有效的是致电:

obj.tooltip.SetMouseExitedCallback ('');

在隐藏工具提示的方法中。它与Mouse Exited()方法在同一个类中定义。 然后在应用程序关闭后,VM调用析构函数并销毁该对象。