当玩家赢得我创建的游戏时,我试图显示警告对话框。但是,我得到一个例外:
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);
}
答案 0 :(得分:6)
您只能在事件处理程序中调用showAndWait()
,而不能在动画中调用Alert
。 show()
类中未明确记录此内容,但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);
这会使对话框在计时器周期外弹出,并且应该解决该问题。