我目前正在使用netbeans 7.2
进行java FX 2.1中的管理员构建我有以下问题:
我正在以MVC模式开发这个特定的工具,所以我创建了3个名为Model,view和Controller的包。
我的问题是,当在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());
我希望你能帮我解决这个问题。
答案 0 :(得分:2)
您需要使用FXML文件的URL调用FXMLLoader#setLocation方法。有关如何加载FXML文件的示例,请查看以下源代码:
答案 1 :(得分:1)
FXMLLoader无法找到.fxml文件。 问题是您对Class.getResource()的调用返回null。 FXMLLoader.load(null)抛出的异常非常具有误导性,它应该是诸如ArgumentNullException之类的东西。 您可以通过指定完整的包路径来解决加载资源文件的问题,在我的情况下,这样的调用有效:
FXMLLoader loader = new FXMLLoader(new Employee().getClass().getResource("/de/mycompany/mypackage/view/loginform.fxml"));
我希望这会有所帮助。