从不同的线程访问 JavaFX UI 元素?



如果我的控制器类是

public class FXMLDocumentController implements Initializable {
@FXML
private TextArea msgArea;
public void initialize(URL url, ResourceBundle rb) {
someThread.start();
}
}

如何从线程更改文本区域的值?

编辑:我使用任务来解决这个问题。感谢所有试图提供帮助的人。

每当需要从线程更新 UI 元素时,都必须让 JavaFX UI 线程执行此操作。尝试从其他线程更新元素可能会导致异常,但也可能导致一些意外行为。

幸运的是,JavaFX 包含了一种有用的方法来执行此操作。只需将其添加到在单独线程上运行的代码中:

Platform.runLater(() -> {
msgArea.setText("Your text");
});

最好使用任务或服务,因为它们提供了更新 UI 元素的内置方法。例如,任务允许调用updateMessage("...")updateProgress("..."),这会更新绑定元素,甚至不需要调用 UI 线程。

最新更新