我们正在使用 JavaFX 编写一个 Java 应用程序。此时我们有3种不同的形式:
- 登录
- 游戏窗口
- 登记
对于我们的下一次迭代,我们想要实现注册表单,但是我们得到了 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
or时,上面的代码正在工作FXMLLoader.fxml
。
当我改变
mainroot = (Parent)registrationLoader.load(this.getClass().getResource("FXMLRegistration.fxml").openStream());
至
mainroot = (Parent)registrationLoader.load(Paths.get("src/hackattackfx/FXMLRegistration.fxml").toUri().toURL());
我在调试器输出中获得了绝对路径,当我将它与file
终端中的命令一起使用时,这是正确的。
我希望有人可以帮助我们解决这个错误。
提前致谢!
编辑
我将一些代码更改为以下内容:
FXMLLoader registrationLoader = new FXMLLoader(getClass().getResource("/FXMLRegistration.fxml"));
mainroot = (Parent)registrationLoader.load();
但这将返回 IllegalStateException: Location is not set。当我删除/
before/FXMLRegistration.fxml
时,我会看到我的 catch 块打印文件的完整路径:
文件:/Users/juleskreutzer/Documents/github/PTS3/HackAttackFX/dist/run1793658053/HackAttackFX.jar!/hackattackfx/FXMLRegistration.fxml
还将路径更改为src/hackattackfx/FXMLRegistration.fxml
将给出 IllegalStateException: Location not set。
项目结构
我们在应用程序中使用不同的包。所有这些包都在默认包中:hackattackfx
默认包中的包是:
- 默认包
- 例外
- 接口
- 枚举
- 资源
- 模板
- JSON 包
我的 FXML 文档位于默认包 (hackattackfx) 中。如果不是 100% 清楚我是如何安排文件的,请查看我的 Github存储库