1

graniteds + javafx+springを使用した小さなテストプロジェクトがあります。このチュートリアルGraniteDs+JavaFxに従いました。

すべて正常に動作しますが、この例のように相対URLの画像がいくつかある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を使用してベースロケーションを設定する方法はありますか?

ありがとう

4

1 に答える 1

2

私はこの質問が少し古いことを知っています、そしてあなたはおそらくそれを何らかの方法で解決したでしょう。しかし、fxmlをロードする前に次のコードを入れて解決しました:

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

それが役に立てば幸い

于 2013-07-10T20:48:36.457 に答える