[英]JavaFX loading FXML causes warning and fails to load the file (skin/modena)
我正在尝试构建一个 JavaFX 应用程序,对于 GUI,我使用 SceneBuilder 生成 fxml 文件以供不同的根使用。 然后我启动应用程序,在某个时候,我尝试使用new FXMLLoader(App.class.getResource("myFXML.fxml")).load()
加载一些 fxml 文件,并将其设置为舞台上场景的 root .
99% 的时间加载完全没有问题,一切都按预期工作,但是 1% 将失败并阻止 fxml 加载而不停止应用程序,而只会抛出以下警告。
WARNING: Caught 'java.lang.ClassCastException: class java.lang.String
cannot be cast to class javafx.scene.paint.Paint (java.lang.String is in
module java.base of loader 'bootstrap'; javafx.scene.paint.Paint is in
module javafx.graphics@18 of loader 'app')' while converting value for
'-fx-background-color' from rule '*.list-view' in stylesheet
jar:file:///C:/mysystem/.m2/repository/org/openjfx/javafx-controls/18/javafx-controls-18-win.jar!/com/sun/javafx/scene/control/skin/modena/modena.bss
大多数情况下导致它的 fxml 是其中带有 ComboBox 的那个,但我认为这与它无关,因为它发生在任何地方。
重要的是警告也不一致,在最后一行而不是*.list-view
其他时候也说*.button
,但我正在做同样的动作来测试它。
复制根本不一致,警告是描述性的,似乎问题出在 JavaFX 文件上(在警告中提到)而不是我写的东西。 因此,我找不到一致的方法来重现它或处理异常或其他东西。
我知道我可以提供更多信息可能会有所帮助,但我现在已经筋疲力尽了。 也许稍后会添加编辑。
我在另一个线程而不是 FX 线程上进行 FXML 加载( new FXMLLoader(App.class.getResource("myFXML.fxml")).load()
)和scene.setRoot(...)
。 所以请确保使用Platform.isFxApplicationThread();
(如评论中所述)操作发生在 FX 线程上以确保预期的行为。
答案不完整,它是当前搜索它的任何人的占位符,这解决了问题。
我会尽快尝试用更多信息和可重复的例子来更新问题。 此外,我将在评论的帮助下继续研究,为这个问题找到可靠的解释。 同时,请随时进行编辑或发布新的更好的答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.