2017-06-25 17 views
1

私が作成したゲームがプレーヤーに勝ったときに警告ダイアログボックスを表示しようとしています。しかし、私は例外を取得:AnimationTimer - アニメーション処理中にshowAndWaitを使用できません

java.lang.IllegalStateException: showAndWait is not allowed during animation or layout processing 

私はAnimationTimerstop()を追加しようとしたが、それはうまくいきませんでした、まだ同じ例外をスロー:

if (ball.getBall().getCenterY() == 0) { 
       //computer lost! 
       stop(); 

       Alert alert = new Alert(Alert.AlertType.INFORMATION); 
       alert.setTitle(null); 
       alert.setHeaderText(null); 
       alert.setContentText("Good game. You won! Click OK to exit."); 

       alert.showAndWait(); //exception thrown here 
       System.exit(0); 
      } 
+1

を説明するように例外が正確にされて:あなたは 'showAndWaitを呼び出すことはできません()アニメーションから。これは 'Alert'のドキュメントで明示的に言及されていませんが、[' Stage' documentation]のドキュメントにあります(http://docs.oracle.com/javase/8/javafx/api/javafx/stage/Stage .html#showAndWait--)。 –

+0

@James_D Ok。回避策はありますか?タイマーを止めて、プレイヤーに勝利したことを伝えるにはどうすればいいですか? – Stardust

+0

私は、動作するはずの回避策を使って回答を追加しました。 –

答えて

3

あなたが唯一のイベントハンドラでshowAndWait()を呼び出すことができますアニメーション内からではありません。これはクラスに明示的に記載されていませんが、documentation for Stageに記載されています。アラートが閉じているとき

コールshow()代わりに、何かを呼び出すために、警告のためにonHiddenイベントのハンドラを使用します。

if (ball.getBall().getCenterY() == 0) { 
    //computer lost! 

    Alert alert = new Alert(Alert.AlertType.INFORMATION); 
    alert.setTitle(null); 
    alert.setHeaderText(null); 
    alert.setContentText("Good game. You won! Click OK to exit."); 

    alert.setOnHidden(evt -> Platform.exit()); 

    alert.show(); 
} 
+0

ありがとう、これは完全に動作します。 'evt - > Platform.exit()'が何を意味するのか説明できますか? – Stardust

+0

@Stardustあなたは何を意味するのか分かりません。それはイベントのハンドラです。 ['Platform.exit()'](http://docs.oracle.com/javase/8/javafx/api/javafx/application/Platform.html#exit--)は、JavaFXを終了する方法です。これは、アラート上で 'hidden'イベントが発生したときに実行されます(つまり、アラートは閉じられます)。 –

+0

ああ、私はその記法を見ていないだけです( ' - > 'で) – Stardust

関連する問題