質問: false; /* flagがtrueになるようなイベント */ //runLaterの外で処理すると「スレッドが違う」と、例外を投げられます... try { Platform.runLater(() -> { System.out.println("runLaterは実行されています。"); //宣言された別ウィンドウとしての(Stage)otherStageをshow() //otherStageの親はこのメソッドのstageになっています。 if(flag)OtherClass.otherStage.show(); }); } catch(Exception e){ e.printStackTrace(); } } } }; new Thread(taskmain).start(); //都合上stageは表示しないようにしたいです。 /* *表示してしまえば、すべてのStageがhide()されてもこのウィンドウ(stage)が残っているので、 *問題なくrunLaterが走るのですが、 *stageは表示しない方針でお願いします。 */ } static public void main(String[] args) { launch(args); } } ``` こんなかんじです(必要なところだけ抜き出したので、かなりガバガバですが...) 解決していただきたいことは、 otherStageがhide()されても、runLaterが止まらないようにする。 MainClass.start()のstageを表示せずに。 ただ、もしstageを表示するだけして、 ユーザーに触れないようにすることができるなら、 そちらがいいかなーとは思っているのですが、 stage.setOpacity(0); では、Windowsですとタスクバーから削除できてしまいます... なので、タスクバーに表示されないようにすることができればいいのですが... ってところです。 もしテストする際は、OtherClass.otherStageをstageを親にして宣言すれば実行されると思います... 止まる流れとしては、 1イベントでflagがtrueになる :走る 2otherStageが表示される :走る 3ボタンを押されるなどして、otherStageがhide()される :ここで走らなくなる 4イベントでflagがtrueになっても、 runLaterが走らないので、otherStageが表示されない... ご助力願います
回答: 全てのStageが閉じた状態になると、`Platform.runLater()`のタスクを実行する JavaFX Application Thread が停止してしまうようです。 これを抑制するには、`Platform.setImplicitExit(false)`を実行すると良いそうです。 `main`メソッドの`launch`メソッドの前にこれを書いてみてください。(どこに書くのが正解なのかは自信がありません。) 参考リンク: Platform - Java FX 8 API ドキュメント Java 1.8 対応: OpenDolphin 日記