JavaFX中的线程和绑定

时间:2018-06-14 20:14:05

标签: java multithreading javafx

我正在尝试为我的JavaFX程序运行两个线程。第一个线程(我们称之为线程1)用于收集测距传感器和摄像机的传感器输入。线程1更新StageWithData(继承Stage的类)中的变量。然后将该变量绑定到我的第二个GUI线程中的标签。使用“绑定”方法形成连接。但是,每当传感器更新时,Java都会给我一个错误

“Thread-4 javalang.IllegalStateExpression:不在FX应用程序线程上; currentThread = Thread-4”

我理解为什么会发生错误,只是不知道如何解决它。

有什么建议吗?我对线程很新。

谢谢!

2 个答案:

答案 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。