JavaFX 应用程序线程。我能找到的消息来源说节点上的所有更新都必须在这个线程中发生。
我正在尝试查找有关此规则的文档,以及此规则是否有任何例外。 https://docs.oracle.com/javase/8/javafx/interoperability-tutorial/concurrency.htm 正如它所说:
JavaFX 场景图表示 JavaFX 应用程序的图形用户界面,它不是线程安全的,只能从 UI 线程(也称为 JavaFX 应用程序线程)访问和修改。
https://docs.oracle.com/javase/8/javafx/get-started-tutorial/jfx-architecture.htm#A1107438
任何“实时”场景,即属于窗口一部分的场景,都必须从此线程访问。可以在后台线程中创建和操作场景图,但是当其根节点附加到场景中的任何活动对象时,必须从 JavaFX 应用程序线程访问该场景图。
我曾经历过,并非节点上的所有更新都必须在 JavaFX AT 上完成。一些更新节点的调用在该线程之外工作正常。例如,更新 Text textProperty 不需要在 JavaFX AT 中运行。因此,它看起来不像设置工具提示,或者改变可见性/禁用/管理。
JavaFX AT 之外的 Label textProperty 更新将抛出一个
IllegalStateException:不在 FX 应用程序线程上;当前线程 = 任务
您将不允许的内容与引发异常的内容混淆了。仅仅因为某些东西没有抛出异常并不意味着它是被允许的,或者它是安全的,或者它可以保证工作。
对属于实时场景图一部分的节点的所有更改都必须在 JavaFX 应用程序线程上发生。
如果违反此规则,JavaFX 会尽最大努力抛出异常。检查线程需要时间,而对于某些操作来说,检查线程的性能成本太高,因此并非所有违反规则都会导致异常。然而,违反规则很容易在未来的任意时间出现不一致的行为,即使没有抛出异常。有关实践中发生这种情况的示例,请参阅移动圆圈随机消失 (javafx)。
| 归档时间: |
|
| 查看次数: |
463 次 |
| 最近记录: |