1

我目前正在使用 netbeans 7.2 在 java FX 2.1 中构建管理员

我有以下问题:

我正在以 MVC 模式开发这个特定工具,因此我创建了 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 回答