簡體   English   中英

JavaFX 加載 FXML 導致警告並且無法加載文件(皮膚/modena)

[英]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 文件上(在警告中提到)而不是我寫的東西。 因此,我找不到一致的方法來重現它或處理異常或其他東西。


到目前為止嘗試過

  • 刪除組合框(以防萬一)
  • 搜索了互聯網,沒有發現任何關於它的信息
  • 重新安裝JDK什么也沒做

筆記

我知道我可以提供更多信息可能會有所幫助,但我現在已經筋疲力盡了。 也許稍后會添加編輯。

長話短說

我在另一個線程而不是 FX 線程上進行 FXML 加載( new FXMLLoader(App.class.getResource("myFXML.fxml")).load() )和scene.setRoot(...) 所以請確保使用Platform.isFxApplicationThread(); (如評論中所述)操作發生在 FX 線程上以確保預期的行為。


重要的

答案不完整,它是當前搜索它的任何人的占位符,這解決了問題。


改進

我會盡快嘗試用更多信息和可重復的例子來更新問題。 此外,我將在評論的幫助下繼續研究,為這個問題找到可靠的解釋。 同時,請隨時進行編輯或發布新的更好的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM