我正在尝试为我的JavaFX程序运行两个线程。第一个线程(我们称之为线程1)用于收集测距传感器和摄像机的传感器输入。线程1更新StageWithData(继承Stage的类)中的变量。然后将该变量绑定到我的第二个GUI线程中的标签。使用“绑定”方法形成连接。但是,每当传感器更新时,Java都会给我一个错误
“Thread-4 javalang.IllegalStateExpression:不在FX应用程序线程上; currentThread = Thread-4”
我理解为什么会发生错误,只是不知道如何解决它。
有什么建议吗?我对线程很新。
谢谢!
答案 0 :(得分:0)
您必须在Platform.runLater调用中包装变量的更新调用,因为这样的更新必须在JavaFX应用程序线程上发生,而不是在其他线程上发生。
答案 1 :(得分:0)
JavaFX应用程序都包含至少一个线程,称为" JavaFX应用程序线程" (JFXAT)。该线程是唯一可以处理应用程序可视元素更改的线程。
创建后台线程时,无法从新线程访问JFXAT。
后台线程与JFXAT交互的唯一方法是将UI更新包装在Platform.runLater()
调用中(只有少数专门的例外)。
在后台线程中,使用以下Lamba表达式完成此操作:
Platform.runLater(() -> {
// Code to update the UI goes here
});
这实质上是将该代码块发送到正确执行的JFXAT。