我们正在使用JavaFX编写Java应用程序。目前,我们有3种不同的形式:


登录
游戏窗口
注册


对于我们的下一个迭代,我们想实现Registration表单,但是得到IOException错误Unknown Path

关于这段代码:

FXMLLoader registrationLoader = new FXMLLoader();
                    try{
                        mainroot = (Parent)registrationLoader.load(this.getClass().getResource("FXMLRegistration.fxml").openStream());
                        Stage registrationStage = new Stage();
                        Scene scene = new Scene(mainroot);
                        registrationStage.setScene(scene);
                        registrationStage.setTitle("Register your account");
                        registrationStage.show();
                    } catch(IOException ex)
                    {
                        System.out.print(ex.getMessage());
                    }


当我将FXMLRegistration.fxml更改为FXMLDocument.fxmlFXMLLoader.fxml时,上面的代码有效。

当我改变

mainroot = (Parent)registrationLoader.load(this.getClass().getResource("FXMLRegistration.fxml").openStream());




mainroot = (Parent)registrationLoader.load(Paths.get("src/hackattackfx/FXMLRegistration.fxml").toUri().toURL());


source

我在调试器输出中获得了绝对路径,当在终端中的file命令中使用它时,这是正确的。

我希望有人可以帮助我们解决这个错误。

提前致谢!

编辑

我将一些代码更改为以下内容:

FXMLLoader registrationLoader = new FXMLLoader(getClass().getResource("/FXMLRegistration.fxml"));
mainroot = (Parent)registrationLoader.load();


但这将返回IllegalStateException:未设置位置。
当我在/之前删除/FXMLRegistration.fxml时,我进入catch块,打印文件的完整路径:


文件:/Users/juleskreutzer/Documents/github/PTS3/HackAttackFX/dist/run1793658053/HackAttackFX.jar!/hackattackfx/FXMLRegistration.fxml


同样,将路径更改为src/hackattackfx/FXMLRegistration.fxml也会给出IllegalStateException:位置未设置。

项目结构

我们在应用程序中使用不同的软件包。所有这些软件包都在默认软件包中:hackattackfx

默认软件包中的软件包是:


默认套餐


例外情况
介面
枚举
资源资源
范本

JSON包


我的FXML文档位于默认程序包(hackattackfx)中。如果不是100%清楚我如何排列文件,请查看my Github repo

最佳答案

因此,我很想知道根本原因,克隆了回购协议,发现实际问题是以下错误,并且是OP在问题中发布的错误


造成原因:java.lang.NullPointerException
在hackattackfx.FXMLRegistrationController.initialize(FXMLRegistrationController.java:67)


这意味着控制器中的pane为空。

这是因为fxml缺少fx:id的声明。

fx:id="pane"添加到FXMLRegistration.fxml的AnchorPane声明中,一切正常。

关于java - 未知路径FXML文档,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33613309/

10-10 20:04