我有TabPane
个Tab
个。我正在创建新的Tab
,并将其添加到我的TabPane
。
然后,我关闭标签页,然后以编程方式将其从TabPane
中删除。
Tab
未设为null
。这是正确的行为吗?如何清理/破坏这个Tab
对象?
答案 0 :(得分:6)
垃圾收集器不会破坏您仍然持有引用的对象。
假设您有一个局部变量或一个字段myTab
,那么只需指定
myTab = null;
之后让垃圾收集者完成他的工作。如果您对此对象实例有其他引用,请对它们执行相同的操作。
答案 1 :(得分:0)
你的标签可能仍然有一个持有引用的EventHandler。
tab.setOnClosed(null);
示例:
// I make setOnClose handler in my constructor
// My set on close handler will close my project
tab.setOnClosed(new EventHandler<Event>() {
@Override
public void handle(Event t) {
closeProject();
}
});
// Somehow my setOnClose handler still exists after closing the tab
public void closeProject() {
// Setting the setOnClose handler to null fixes the garbage collection issue for me
tab.setOnClosed(null);
tab.setUserData(null);
tab = null;
}