1

私は現在、netbeans 7.2 を使用して Java FX 2.1 で管理者ビルドに取り組んでいます。

次の問題があります。

私はこの特定のツールを MVC パターンで開発しているので、Model、View、Controller という 3 つのパッケージを作成しました。

私の問題は、netbeans でプロジェクトをビルドするときに、ビュー パッケージの外にあると思われるファイルのみを読み取ることです。コンテキスト パスを示します。

.../administradorInfinix/view/
.../administradorInfinix/controller/
.../administradorInfinix/model

そのため、ビュー パッケージの外にある場合は、ビューに関する fxml ファイルのみを読み取ります ( .../administradorInfinix/)

これは、ファイルのアドレスを設定する場所です。

    private void irInicioSesion() {
    try {
        replaceSceneContent("InicioSesion.fxml");
    } catch (Exception ex) {
        Logger.getLogger(AdministradorINFINIX.class.getName()).log(Level.SEVERE, null, ex);
    }
}

ファイル名がInicioSesion.fxmlであることがわかります。これはビュー パッケージ内にあるはずですが、この場合は読み込まれません。

これは、fxml ファイルの検索に使用している replaceSceneContent です。

private Parent replaceSceneContent(String fxml) throws Exception {
    Parent page = (Parent) FXMLLoader.load(AdministradorINFINIX.class.getResource(fxml), null, new JavaFXBuilderFactory());
    Scene scene = stage.getScene();
    if (scene == null) {
        scene = new Scene(page,548,416);
        //scene.getStylesheets().add(AdministradorINFINIX.class.getResource("demo.css").toExternalForm());
        stage.setScene(scene);
    } else {
        stage.getScene().setRoot(page);
    }
    stage.sizeToScene();
    return page;
}

そして、これは実行しようとしたときに表示されるエラーです (正常にビルドされますが、実行されません)。

> administradorinfinix.AdministradorINFINIX irInicioSesion
Grave: null
java.lang.IllegalStateException: Location is not set.
    at javafx.fxml.FXMLLoader.load(Unknown Source)
    at javafx.fxml.FXMLLoader.load(Unknown Source)
    at javafx.fxml.FXMLLoader.load(Unknown Source)
    at javafx.fxml.FXMLLoader.load(Unknown Source)
    at administradorinfinix.AdministradorINFINIX.replaceSceneContent(AdministradorINFINIX.java:126)
    at administradorinfinix.AdministradorINFINIX.irInicioSesion(AdministradorINFINIX.java:110)
    at administradorinfinix.AdministradorINFINIX.start(AdministradorINFINIX.java:46)
    at com.sun.javafx.application.LauncherImpl$5.run(Unknown Source)
    at com.sun.javafx.application.PlatformImpl$4.run(Unknown Source)
    at com.sun.javafx.application.PlatformImpl$3.run(Unknown Source)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.access$100(Unknown Source)
    at com.sun.glass.ui.win.WinApplication$2$1.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:722)

110行目はどこですか

  replaceSceneContent("InicioSesion.fxml");

そして126行目は

Parent page = (Parent) FXMLLoader.load(AdministradorINFINIX.class.getResource(fxml), null, new JavaFXBuilderFactory());

この問題の解決にご協力いただければ幸いです。

4

2 に答える 2

2

FXMLファイルのURLを使用してメソッドFXMLLoader#setLocationを呼び出す必要があります。FXMLファイルをロードする方法の例については、次のソースを参照してください。

https://github.com/cathive/fx-guice/blob/master/src/main/java/com/cathive/fx/guice/GuiceFXMLLoader.java

于 2012-09-21T10:45:53.887 に答える
1

FXMLLoader が .fxml ファイルを見つけられません。問題は、 Class.getResource() への呼び出しが null を返すことです。FXMLLoader.load(null) によってスローされる例外は誤解を招く可能性が高く、ArgumentNullException のようなものであるべきです。完全なパッケージ パスを指定することで、リソース ファイルの読み込みに関する問題を解決できます。私の場合、次のような呼び出しが機能します。

    FXMLLoader loader = new FXMLLoader(new Employee().getClass().getResource("/de/mycompany/mypackage/view/loginform.fxml"));

これが役立つことを願っています。

于 2013-09-24T10:15:04.650 に答える