gpt4 book ai didi

javafx - 在应用程序线程外部更新 JavaFX Live 节点

转载 作者:行者123 更新时间:2023-12-01 16:42:20 26 4
gpt4 key购买 nike

JavaFX 应用程序线程。我能找到的消息来源说节点上的所有更新都必须在此线程中发生。

我正在尝试查找相关文档以及此规则是否有任何异常(exception)情况。 https://docs.oracle.com/javase/8/javafx/interoperability-tutorial/concurrency.htm正如它所说:

The JavaFX scene graph, which represents the graphical user interface of a JavaFX application, is not thread-safe and can only be accessed and modified from the UI thread also known as the JavaFX Application thread.

https://docs.oracle.com/javase/8/javafx/get-started-tutorial/jfx-architecture.htm#A1107438

Any ”live” scene, which is a scene that is part of a window, must be accessed from this thread. A scene graph can be created and manipulated in a background thread, but when its root node is attached to any live object in the scene, that scene graph must be accessed from the JavaFX application thread.

我的经验是,并非节点上的所有更新都必须在 JavaFX AT 上完成。一些更新节点的调用在此线程之外工作正常。例如,更新文本 textProperty 不需要在 JavaFX AT 中运行。因此,它看起来也不像设置工具提示或更改可见性/禁用/托管。

JavaFX AT 之外的 Label textProperty 更新将引发

IllegalStateException:不在 FX 应用程序线程上;当前线程=任务

最佳答案

您将不允许的内容与引发异常的内容混淆了。仅仅因为某些东西不会抛出异常并不意味着它是允许的,或者它是安全的,或者它保证可以工作。

对属于实时场景图一部分的节点的所有更改必须发生在JavaFX应用程序线程上。

如果违反此规则,JavaFX 会尽力抛出异常。检查线程需要花费时间,并且对于某些操作来说检查线程的性能成本太高,因此并非所有违反规则的行为都会导致异常。然而,违反规则很容易在未来的任意时间出现不一致的行为,即使没有抛出异常。请参阅Moving circle randomly disappears (javafx)获取实践中发生这种情况的示例。

关于javafx - 在应用程序线程外部更新 JavaFX Live 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61838640/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com