EclipseでJava8をつかって開発しています
JavaFXで、すべてのウィンドウのShowingがHideになると、
つまり全てのStageがhide()されると、
Platform.runLater()が使えなく(反応しなく)なるので困っています…
ソースとしては、
java
1 2/* 3package,import省略 4*/ 5 6public class MainClass extends Application{ 7 @Override 8 public void start(Stage stage) throws Exception { 9 Task<Void> taskmain = new Task<Void>() { 10 @Override 11 protected Void call() throws Exception { 12 while(true){ 13 14 try { 15 Thread.sleep(1); 16 } catch(InterruptedException e){ 17 e.printStackTrace(); 18 } 19 20 boolean flag = false; 21 /* flagがtrueになるようなイベント */ 22 //runLaterの外で処理すると「スレッドが違う」と、例外を投げられます… 23 try { 24 Platform.runLater(() -> { 25 System.out.println("runLaterは実行されています。"); 26 //宣言された別ウィンドウとしての(Stage)otherStageをshow() 27 //otherStageの親はこのメソッドのstageになっています。 28 if(flag)OtherClass.otherStage.show(); 29 30 }); 31 } catch(Exception e){ 32 e.printStackTrace(); 33 } 34 } 35 } 36 }; 37 new Thread(taskmain).start(); 38 39 //都合上stageは表示しないようにしたいです。 40 /* 41 *表示してしまえば、すべてのStageがhide()されてもこのウィンドウ(stage)が残っているので、 42 *問題なくrunLaterが走るのですが、 43 *stageは表示しない方針でお願いします。 44 */ 45 46 47 48 } 49 50 static public void main(String[] args) { 51 launch(args); 52 } 53}
こんなかんじです(必要なところだけ抜き出したので、かなりガバガバですが…)
解決していただきたいことは、
otherStageがhide()されても、runLaterが止まらないようにする。
MainClass.start()のstageを表示せずに。
ただ、もしstageを表示するだけして、
ユーザーに触れないようにすることができるなら、
そちらがいいかなーとは思っているのですが、
stage.setOpacity(0);
では、Windowsですとタスクバーから削除できてしまいます…
なので、タスクバーに表示されないようにすることができればいいのですが…
ってところです。
もしテストする際は、OtherClass.otherStageをstageを親にして宣言すれば実行されると思います…
止まる流れとしては、
①イベントでflagがtrueになる :走る
②otherStageが表示される :走る
③ボタンを押されるなどして、otherStageがhide()される :ここで走らなくなる
④イベントでflagがtrueになっても、
runLaterが走らないので、otherStageが表示されない…
ご助力願います

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/05 08:43