gpt4 book ai didi

java - 如何在java中定时器倒计时结束时弹出消息窗口?

转载 作者:行者123 更新时间:2023-12-01 19:05:13 25 4
gpt4 key购买 nike

当我尝试实现弹出窗口时,我做了这样的事情:

OptionController 中的代码片段:

static int SECOND = 100;

Timer timer = new Timer();
TimerTask task =
new TimerTask() {
@Override
public void run() {

SECOND--;

if (SECOND == 0) {
timer.cancel();

try {
AlertController.courtChangeAlert("Time's up."); // line 56
} catch (IOException e) {
e.printStackTrace();
}
}
}
};

public void clickTimerStart() throws IOException {
timer.scheduleAtFixedRate(task, 1000, 1000);
}

AlertController 中的代码片段:

public static void courtChangeAlert(String alert) throws IOException {
FXMLLoader fxmlLoader =
new FXMLLoader(AlertController.class.getResource("/view/CourtChangeAlert.fxml"));
showScene(fxmlLoader, alert); // line 43
}

private static void showScene(FXMLLoader fxmlLoader, String alert) throws IOException {
AnchorPane alertPane = fxmlLoader.load();
AlertController alertController = fxmlLoader.getController();
alertController.setAlertLabel(alert);
Scene scene = new Scene(alertPane);
Stage stage = new Stage(); // line 51
stage.setScene(scene);
stage.show();
}

倒计时结束后,我收到错误消息:

Exception in thread "Timer-0" java.lang.IllegalStateException: Not on FX application thread; currentThread = Timer-0
at com.sun.javafx.tk.Toolkit.checkFxUserThread(Toolkit.java:279)
at com.sun.javafx.tk.quantum.QuantumToolkit.checkFxUserThread(QuantumToolkit.java:423)
at javafx.stage.Stage.<init>(Stage.java:241)
at javafx.stage.Stage.<init>(Stage.java:227)
at controller.AlertController.showScene(AlertController.java:51)
at controller.AlertController.courtChangeAlert(AlertController.java:43)
at controller.OptionController$1.run(OptionController.java:56)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)

我做错了什么以及如何修改代码?提前致谢。

最佳答案

只需将行 AlertController.courtChangeAlert("Time's up."); 换行即可在 JavaFX 线程上启动。

Platform.runLater(()->AlertController.courtChangeAlert("Time's up."));

计时器有它自己的线程,当它触发操作时,它会在它自己的线程上触发它,而不是在 javafx 的线程上。这就是您遇到的错误。

关于java - 如何在java中定时器倒计时结束时弹出消息窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59574088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com