JavaFX标签何时应该被垃圾回收?

4

我有一个带有选项卡的TabPane。我正在创建新的Tab,将其添加到我的TabPane中。 然后,我通过编程方式关闭选项卡并从TabPane中删除它。

Tab未设置为null。这是正确的行为吗?如何清除/销毁此Tab对象?


请展示你的代码。 - Jens Piegsa
这是简单的代码,我只是添加了事件处理程序,通过 setOnClosed(event) 方法从 TabPane 中删除选项卡。没什么特别的。我只是想知道这是否是正确的行为。 - kingkong
正确的行为是指什么?你的代码?JavaFX类?垃圾回收器?是什么让你认为有些东西不正确?发生了什么? - Stephen C
我想知道Java/JavaFx是否应该在Tab关闭或从TabPane中移除后立即清理/销毁它。 - kingkong
2个回答

6
垃圾回收器不会销毁你仍然持有引用的对象。
假设你有一个本地变量或字段 myTab,那么只需赋值即可。
myTab = null;

之后让垃圾回收器完成它的工作。如果您还有对该对象实例的其他引用,请对它们执行相同的操作。


我在一个选项卡中有1000个类,然后选项卡为空,但这1000个类没有清除...请帮帮我... - Kamlesh

0

你的选项卡可能仍然有一个持有引用的事件处理程序。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接