调用导致FX Application Thread以外的线程对UI进行更改的代码是错误的, 无论它是否引发异常
。如果违反此规则,FX工具箱将尽最大努力抛出异常,但是在某些情况下,对性能的影响太大,无法执行检查。如果创建这些绑定,则 必须 在FX
Application Thread上执行对绑定到的属性的任何后续更改。即,如果您在后台线程中运行,则 必须 使用以下代码更改属性:
Platform.runLater(() -> CacheManager.progress.set(...));
和
Platform.runLater(() -> CacheManager.status.set(...));
由于您可能不希望将服务代码绑定到JavaFX(通过
Platform类),因此可以考虑使用侦听器而不是绑定,并计划从侦听器进行更新:
CacheManager.progress.addListener((obs, oldValue, newValue) -> Platform.runLater(() -> progressBar.setProgress(newValue.doublevalue())));CacheManager.status.addListener((obs, oldStatus, newStatus) -> Platform.runLater(() -> someLabel.setText(newStatus)));
如果用这些侦听器替换绑定,则可以随意更新任何线程上的属性。



