gpt4 book ai didi

javafx场景中的javafx线程异常

转载 作者:行者123 更新时间:2023-12-02 02:18:38 27 4
gpt4 key购买 nike

与我的问题相关:Bind label with two different values-javafx ,现在我可以将两个值绑定(bind)到标签并在 Eclipse 中的 UI 上进行更新。由于我的应用程序非常频繁地更新值,因此我在计时器中完成了绑定(bind)工作,如下所示:

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

这在我的 eclise 中运行良好,但是当我使用
创建项目的构建时 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.无需每秒重新绑定(bind)。
2. 绑定(bind)属性在执行更改的线程上接收更改通知,因此如果在另一个线程上更改了 answerConnector.getNoOfAnswers,您将得到一个 not-on-FX-线程异常。

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

关于javafx场景中的javafx线程异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48884538/

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