JavaFX - 处理窗口

时间:2015-01-11 16:54:18

标签: java javafx dispose

我在JavaFX中有一个窗口需要“清理”.E:重置所有字段的值并将其设置回初始化时的状态。我想我可以做类似window.dispose()的事情,但事实证明这似乎并不存在。

这似乎是对窗口引擎的大规模疏忽,因为我将要打开多个窗口,我不想坚持。如果我做stage.close()它只是隐藏窗口而不释放内存,可能导致内存泄漏。

1 个答案:

答案 0 :(得分:3)

当您在窗口上调用close(),(或等效地,hide())时,FX工具包将释放它对该窗口的任何引用。因此,只要您不保留对窗口的引用,一旦调用了close(),它就有资格进行垃圾回收。它的行为与垃圾收集方面的任何其他Java对象相同 - 一旦收集了垃圾,就会释放与窗口相关的资源。

这是一个每秒打开一个新窗口的演示,当它执行此操作时关闭上一个窗口。窗口在标签中显示图像,因此它消耗了合理的内存块。主阶段显示内存统计信息(也每秒更新一次)。这完全符合您的预期,随着内存逐渐增加,直到垃圾收集器启动,此时内存使用率会下降。 (在我的系统上,它在~7MB到~65MB之间循环;您的里程可能因OS,JDK版本和系统资源而异。)您可以在{{1}的末尾插入System.gc();的呼叫。如果你想更清楚地看到垃圾收集释放所有资源,那么处理程序(仅用于演示目的;我不建议在实际代码中执行此操作)。

onSucceeded