我目前正在尝试开发JavaFX应用程序(游戏) . 为了保持应用程序顺利运行,我尝试将尽可能多的程序逻辑放到一个单独的线程中 . 但是,我经常遇到一些JAVAFX API调用需要在JFX Application线程中运行的问题 . 例如 . 创建一组矩形并对其进行着色可以在一个线程中完成 - 将它们添加到“Group”时,调用.doLayout()和.applycss()需要JFX Appl . 线 . 我还意识到“.play()”转换也需要在JFX Application线程中运行 .
问题是 - 如果你没有在正确的线程中执行它 - 在JFX中可能会随机出现“数组越界”异常,这不会指向根本原因 . 总是很难确定程序和图形逻辑是可以卸载到线程还是需要在JFX应用程序线程中运行 .
有人知道需要在JFX应用程序线程下运行的JavaFX方法调用列表吗?
谢谢大家!
1 回答
根据Application class documentation(这也在JavaFX文档的其他地方指定):
因此,您可以在后台线程上创建新节点(例如矩形),并且只要它们尚未附加到场景,您就可以在后台线程上修改它们的属性(例如“着色它们”) . 将节点附加到场景后,必须在FX应用程序线程上对节点进行任何修改 .
如果窗格或组附加到场景,则调用
getChildren().add(...)
会修改该窗格/组,因此必须在FX应用程序线程上执行 . 您引用的其他示例(layout()
和applyCSS()
)仅在相关节点无论如何附加到场景时才有意义 .