繁体   English   中英

javafx场景上的javafx线程异常

[英]javafx thread exception on javafx scene

与我的问题有关: 使用两个不同的值-javafx绑定标签 ,现在我可以将两个值绑定到标签并在Eclipse中更新UI。 由于我的应用程序非常频繁地更新值,因此我在计时器中完成了绑定工作,如下所示:

Timeline timer = new Timeline(new KeyFrame(Duration.seconds(1), new 
EventHandler<ActionEvent>() {

    @Override
    public void handle(ActionEvent event) {
            answerQuesLbl.textProperty().bind(answerConnector.getNoOfAnswers().asString().concat("/").concat(answerConnector.getNoOfQuestions().asString()));
    }
}));

timer.setCycleCount(Timeline.INDEFINITE);
timer.play();

在我的职位范围内,这工作正常,但是当我使用创建项目的构建时
mvn assembly:assembly -Dmaven.test.skip=true

并使用bat文件运行项目,一切正常,即使值正在更新但不在UI上,它也会给出如下异常:

Exception in thread "Thread-7" java.lang.IllegalStateException: 
    Not on FX application thread; currentThread = Thread-7
    at com.sun.javafx.tk.Toolkit.checkFxUserThread(Toolkit.java:229)
    at com.sun.javafx.tk.quantum.QuantumToolkit.checkFxUserThread(QuantumToolkit.java:423)

我的构建很好,是否需要为此创建其他类型的线程?

您的代码有两个问题:
1.无需每秒重新绑定。
2.绑定属性会在执行更改的线程上收到更改通知,因此,如果answerConnector.getNoOfAnswers在另一个线程上更改,您将获得非on-on-FX线程异常。

您可以更改事件处理程序,以便每秒设置文本( Timeline确保将在FX线程上调用该文本),或者确保在FX线程上执行了原始更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM