自分は「なぜshowAndWaitをAnimationのハンドラーから実行してはならないのか」の根拠を説明できないため、解決方法として適切かどうか自信があるとはいえませんが・・・
###何がJavaFXの制約なのか?
エラーメッセージによれば文字通りAnimation中(即ちAnimationから起動されるハンドラーの中)ではshowAndWaitは使ってはならないということのようです。Animationはユーザーのインタラクションには関係しない非同期な処理のみを行うと想定して(JavaFXが)設計されているということなのかも知れません。
ただそのような機能を実現することが「UI的におかしなことか?」というと個人的には「おかしくないケースがありそう」な気がします。「ユーザーインタラクションによってある短いアニメーションを表示し、それが完了した時点でshowAndWaitのような同期的なユーザーインタラクションを行う」というようなことをやりたくなる場面がありそうな気がするからです。典型的な使い方とは言えないかも知れませんが。
###対処方法
Animationのハンドラーの中で直接showAndWaitを実行するのではなくハンドラー内からPlatform#runLater
を用いてshowAndWaitを実行してやると可能なようです。(下記コード例を参照ください)
java
1Animation animation = ...;
2animation.setOnFinished(ev -> {
3 Platform.runLater(() -> {
4 TextInputDialog dialog = new TextInputDialog();
5 Optional<String> res = dialog.showAndWait();
6 System.out.println("res = " + res);
7 });
8 });
「できそうな気がしたのでやってみたらとりあえず動いた」ということでしかありませんので冒頭に書きました通り本対処が妥当かどうかについてはあまり自信ありません。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。