AnimationTimer - 动画处理期间不允许使用showAndWait

时间:2017-06-25 00:29:16

标签: java animation exception javafx

当玩家赢得我创建的游戏时,我试图显示警告对话框。但是,我得到一个例外:

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

我尝试在stop()中添加AnimationTimer,但它不起作用,仍然抛出相同的异常:

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);
            }

2 个答案:

答案 0 :(得分:6)

您只能在事件处理程序中调用showAndWait(),而不能在动画中调用Alertshow()类中未明确记录此内容,但documentation for Stage中对此进行了记录。

改为调用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(); } 事件处理程序在警报关闭时调用某些内容:

sudoers

答案 1 :(得分:0)

一种替代方法是将您的代码放入私有方法中,并使用方法引用或在Platform.runLater()调用中可运行的lambda进行调用。

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);

这会使对话框在计时器周期外弹出,并且应该解决该问题。