与我的问题相关:使用两个不同的值-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();
这在我的 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. 无需每秒重新绑定。
2. 绑定属性在执行更改的线程上接收更改通知,因此如果answerConnector.getNoOfAnswers
在另一个线程上更改,您将收到 not-on-FX-thread 异常。
您可以更改事件处理程序,以便每秒设置文本(Timeline
确保它将在 FX 线程上调用),或者确保在 FX 线程上执行原始更改。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句