14

JavaFX と Threads の操作中に問題が発生しました。基本的に、私には 2 つのオプションがあります。Tasksまたはを使用しますPlatform.runLater。私が理解しているPlatform.runLaterように、単純な/短いタスクとTask長いタスクに使用する必要があります。しかし、私はそれらのどれも使用できません。

を呼び出すとThread、タスクの途中でキャプチャ ダイアログをポップアップする必要があります。を使用しTaskている間、新しいダイアログを表示するという私の要求が無視されます... 新しいステージを作成することはできません。

一方、 を使用するPlatform.runLaterと、ダイアログを表示できますが、ポップアップ ダイアログが表示されるまで、プログラムのメイン ウィンドウがフリーズします。

これには何らかの解決策が必要です。誰かがこれに対処する方法を知っているか、同様の経験があり、解決策を見つけた場合、私はあなたからの連絡を楽しみにしています!

4

3 に答える 3

38

puce が言うように、バックグラウンドで実行する必要があることにはTaskorを使用する必要があります。ServiceまたPlatform.runLater、バックグラウンド スレッドから JavaFX アプリケーション スレッドで処理を実行します。

それらを同期する必要があり、それを行う方法の 1 つは class を使用することですCountDownLatch

次に例を示します。

Service<Void> service = new Service<Void>() {
        @Override
        protected Task<Void> createTask() {
            return new Task<Void>() {           
                @Override
                protected Void call() throws Exception {
                    //Background work                       
                    final CountDownLatch latch = new CountDownLatch(1);
                    Platform.runLater(new Runnable() {                          
                        @Override
                        public void run() {
                            try{
                                //FX Stuff done here
                            }finally{
                                latch.countDown();
                            }
                        }
                    });
                    latch.await();                      
                    //Keep with the background work
                    return null;
                }
            };
        }
    };
    service.start();
于 2013-05-23T11:18:54.563 に答える