1

我有一个使用 graniteds+javafx+spring 的小型测试项目。我遵循了本教程GraniteDs+JavaFx

一切正常,但如果我使用一个 fxml 文件,其中我有一些具有相对 url 的图像,如本例所示:

<children>
    <ImageView fitHeight="32.0" fitWidth="32.0" layoutX="14.0" layoutY="14.0" onMouseClicked="#menuHome" pickOnBounds="true" preserveRatio="true">
      <image>
        <Image url="@../images/icons/home.png" />
      </image>
    </ImageView>

我有这个例外:

 SEVERE: Could not show view
 javafx.fxml.LoadException: Base location is undefined.
     at javafx.fxml.FXMLLoader$Element.processPropertyAttribute(FXMLLoader.java:283)
     at javafx.fxml.FXMLLoader$Element.processInstancePropertyAttributes(FXMLLoader.java:197)
     at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:570)
     at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2314)
     at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2131)
     at org.granite.client.tide.javafx.TideFXMLLoader.load(TideFXMLLoader.java:49)

加载 FXML 的代码是这样的:

private Parent showView(Stage stage, boolean loggedIn) {
try {               
    Parent root = (Parent) TideFXMLLoader.load(contextManager.getContext(),
         loggedIn ? "Home.fxml" : "LoginUi.fxml", loggedIn ? Home.class
        : LoginUi.class);


            Scene scene = new Scene(root);              
            stage.setScene(scene);
            stage.show();

            return root;
        } catch (Exception e) {
            log.error(e, "Could not show view");
        }
        return null;
    }

有没有办法用 TideFXMLLoader 设置基准位置?

谢谢

4

1 回答 1

2

我知道这个问题有点老了,你可能已经以某种方式解决了。但我解决了它在加载 fxml 之前放置以下代码:

loader.setLocation(Class.class.getResource(url));

希望能帮助到你

于 2013-07-10T20:48:36.457 回答