2016-05-13 18 views
1

設定した時間が経過した後、primaryStageを更新しようとしています。これは私を与える:java.lang.IllegalStateException: Not on FX application thread; 私はStackOverflowの上で解決策を探してきたと私は何人かの人々が使用することをお勧め見つけ別のスレッドからのUIの更新(時間の経過)

Platform.runLater(new Runnable ...) 

出典:https://stackoverflow.com/a/17851019/5314214

しかし、それでもまだ、私はそれを動作させる方法を見つけ出すことはできません設定した時間が経過した後。

マイコード:

Timer timer = new Timer(); 
timer.schedule(
    new TimerTask() { 
     @Override 
     public void run() { 
      Platform.runLater(() -> update(primaryStage)); 
      timer.cancel(); 
     } 
    }, 400 
); 

いつでもあなたが別のスレッドからあなたのステージを変更したいあなたはPlatform.runLaterとしてのみFX application threadを通してそれを実行する必要があります。これはそれを行う方法がある

Timer timer = new Timer(); 
timer.schedule(new TimerTask() { 
    @Override 
    public void run() { 
     update(primaryStage); 
     timer.cancel(); 
    } 
}, 400); 

答えて

3

実際にJavaFXは、バグを修正するのを防ぐために並行スレッドによって使用されるようには設計されていません。

2

もう1つの解決策は、PauseTransitionを使用することです。利点は、あなたが使用する必要がないということです。Platform.runLater()

PauseTransition pauseTransition = new PauseTransition(Duration.millis(400)); 
    pauseTransition.setOnFinished(e -> updateStage()); 
    pauseTransition.playFromStart(); 
関連する問題