什么时候垃圾收集器应该收集JavaFX选项卡?

时间:2013-12-19 22:37:28

标签: java garbage-collection javafx

我有TabPaneTab个。我正在创建新的Tab,并将其添加到我的TabPane。 然后,我关闭标签页,然后以编程方式将其从TabPane中删除。

Tab未设为null。这是正确的行为吗?如何清理/破坏这个Tab对象?

2 个答案:

答案 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;
}