与我的问题相关:Bind label with two different values-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)我的构建很好,我需要为这个创建不同的线程吗?
发布于 2018-02-20 11:47:08
您的代码有两个问题:
answerConnector.getNoOfAnswers,您将得到一个不对FX线程的异常。您可以更改事件处理程序,以便每秒钟设置文本( Timeline确保在FX线程上调用它),或者确保在FX线程上执行原始更改。
https://stackoverflow.com/questions/48884538
复制相似问题