如何解决(java.lang.IllegalStateException:不在 FX 应用程序线程上)?

How to solve (java.lang.IllegalStateException: Not on FX application thread)?

我正在 JavaFX 上开发简单的 Brick Breaker 游戏。到现在为止一切正常,但是当我尝试添加正在更新时间的标签时,它出现了这个错误。我认为问题出在 Timer class 中,因为它在不同的线程上执行,因此 JavaFX 主线程会产生此异常。但是为什么会这样呢? Java在Swing中使用不同的线程是不是不合法?谁能帮帮我?

这是 Main Class,它创建新任务,每秒向标签添加新时间并将其发送到控制器,控制器将此标签添加到 fxml。

Time should be shown here

protected static Label get Time Label() {
    timeShowLabel.setLayoutX(507.0);
    timeShowLabel.setLayoutY(-2.0);
    Platform.runLater(() -> {
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                // TODO Auto-generated method stub
                SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
                timeShowLabel.setText(formatter.format(new Date()));
            }
        }, 1000, 1000);
    });
    return timeShowLabel;

}

Exception Image

控制器class

public void initialize(URL arg0, ResourceBundle arg1) {
        // TODO Auto-generated method stub
        setRandomColor();
        mainLayout.getChildren().add(Main.getTimeLabel());
    }

您的代码在概念上是错误的。 Platform.runLater 在 FX 应用程序线程上执行给定代码,但您不想在该线程上安排计时器。相反,计时器 运行 的代码必须包装在 Plaform.runLater 中,因为它设置了必须在 FX 应用程序线程上发生的标签。