[英]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.