2

我们正在研究 JavaFX 2.2 作为构建桌面应用程序的框架。但是在花费大量开发人员时间之前,我们想确保 JavaFX 适合这项工作,因此我们进行了一个小型压力测试,看看它是否会泄漏资源。该测试在一个永无止境的循环中显示和隐藏一个包含标签和按钮的舞台。我们希望这会永远持续下去而不会出现问题,但是经过大约 15500 次迭代后,我们得到了这个异常

java.lang.RuntimeException: could not create platform window
at com.sun.glass.ui.Window.<init>(Window.java:180)
at com.sun.glass.ui.win.WinWindow.<init>(WinWindow.java:20)
at com.sun.glass.ui.win.WinApplication.createWindow(WinApplication.java:97)
at com.sun.javafx.tk.quantum.WindowStage.initPlatformWindow(WindowStage.java:131)
at com.sun.javafx.tk.quantum.WindowStage.init(WindowStage.java:82)
at com.sun.javafx.tk.quantum.QuantumToolkit.createTKStage(QuantumToolkit.java:501)
at javafx.stage.Stage.impl_visibleChanging(Stage.java:928)
at javafx.stage.Window$10.invalidated(Window.java:689)
at javafx.beans.property.BooleanPropertyBase.markInvalid(BooleanPropertyBase.java:127)
at javafx.beans.property.BooleanPropertyBase.set(BooleanPropertyBase.java:161)
at javafx.stage.Window.setShowing(Window.java:782)
at javafx.stage.Window.show(Window.java:797)
at javafx.stage.Stage.show(Stage.java:229)
at leaktest.FXMLController.showHideDialog(FXMLController.java:58)

我们最好的猜测是 Stage 上的 show()/hide() 泄漏了一些资源,而 dheapmon 揭示了桌面堆内存实际上在测试期间泄漏,但我们没有达到限制(在我们的测试机器上为 20 MB)。GDI 句柄和 USER 句柄限制也不是问题,因为这些句柄没有泄漏(根据 Process explorer)。对导致异常的原因有什么建议吗?

4

1 回答 1

0

这是 JavaFX 的窗口处理代码中的内存泄漏。作为错误修复RT-26822 Win: Stage Exception:could not create platform window的一部分,该漏洞已在 JavaFX 2.2.40 中得到修复。

于 2014-08-04T17:51:38.693 回答