我们正在使用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.fxml
或FXMLLoader.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/