我使用graniteds + javafx + spring进行了一个小型测试项目。我按照本教程GraniteDs+JavaFx。
一切正常,但是如果我使用fxml文件,其中我有一些带有相对网址的图像,如下例所示:
<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设置基本位置吗?
由于
答案 0 :(得分:2)
我知道这个问题有点老了,你可能已经解决了一些问题。但是我在加载fxml之前解决了它以下代码:
loader.setLocation(Class.class.getResource(URL));
希望有所帮助