デスクトップアプリケーションを構築するためのフレームワークとして 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)
ステージ上の show()/hide() がリソースをリークし、テスト中にデスクトップ ヒープ メモリが実際にリークしていることを dheapmon が明らかにしているが、制限 (テスト マシンで 20 MB) には達していないことが最も推測されます。GDI ハンドルと USER ハンドルの制限も問題ではありません。これらのハンドルはリークされていないためです (プロセス エクスプローラーによると)。例外の原因について何か提案はありますか?