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

标签 java matlab custom-controls

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

我正在使用这段代码为 jLabel 设置 MouseExitedCallback。这是类的一个方法:

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

此方法是从另一个类调用的,该类实际上包含 MouseExitedCallback 的代码。 在那个类中,它是这样调用的:

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

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

最佳答案

首先我想到的是

obj.tooltip.SetMouseExitedCallback ('');

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

最后起作用的是调用:

obj.tooltip.SetMouseExitedCallback ('');

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

关于java - 使用自定义 Java 对象回调后对象仍在内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15139679/

相关文章:

java - 在 onCreateView 中膨胀类时出错...

arrays - 在 MATLAB R2018a 及更新版本中无需数据复制即可将复数转换为实数

matlab - 为符号数组中特定索引中的符号赋值

java - 如何使组件中的 mouseEvent 在子组件中被识别?

java - 如何在android中使用recyclerView传递id而不是位置

swift - cocoa 自定义控件不可见

iPhone UI 库?

cocoa - 如何创建自定义 NSView 的缩小版本

java - 如何禁用声音

matlab - 如何将二进制值列表转换为int32类型?