JavatterFXでウィンドウ閉じてもVMが終了しない問題あれこれ
JavatterFXの終了処理はウィンドウを閉じた時にJavaFXのスレッドを終了させるだけのものなので、Swingとかでウィンドウを表示させてるとスレッドが残り続けて、VMが終了しません。
ウィンドウが一回限りの表示なら
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
でOKなのですが、再利用する場合はそうもいきません。
なのでメインウィンドウの終了イベントにハンドラをぶち込んでMainWindowCloseEventを発火させました。
このイベントは自作です。発火時のDateのみを持ちます。
メインクラス
EventHandler<WindowEvent> handler = new EventHandler<WindowEvent>() { @Override public void handle(WindowEvent windowEvent) { Platform.exit(); windowEvent.consume(); EventManager.INSTANCE.eventFire(new MainWindowCloseEvent()); } }; Main.getStage().addEventHandler(WindowEvent.WINDOW_CLOSE_REQUEST, handler);
Windowを継承したクラス
@EventHandler public void onWindowClose(MainWindowCloseEvent event) { this.dispose(); }