未知路径 FXML 文档
Unknown Path FXML document
我们正在使用 JavaFX 编写 Java 应用程序。此时我们有3种不同的形式:
- 登录
- 游戏window
- 注册
对于我们的下一次迭代,我们想要实现注册表单,但是我们得到了 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();
但这将 return 一个 IllegalStateException: Location is not set。
当我在 /FXMLRegistration.fxml
之前删除 /
时,我到达我的 catch 块打印文件的完整路径:
file:/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% 清楚我是如何安排文件的,请查看 my Github repo
所以,我很好奇地想找出根本原因,我克隆了 repo,发现实际问题是以下错误以及 OP 在问题中发布的错误
Caused by: java.lang.NullPointerException
at hackattackfx.FXMLRegistrationController.initialize(FXMLRegistrationController.java:67)
这意味着在控制器中 pane
为空。
这是因为 fxml 缺少 fx:id
的声明。
将 fx:id="pane"
添加到 FXMLRegistration.fxml
的 AnchorPane 声明中,一切正常。
您的路径需要从 /
开始
这对我有用:
final String fxmlPath = "/fxml/Main.fxml";
final FXMLLoader loader = new FXMLLoader(this.getClass().getResource(fxmlPath));
Main.fxml
位于资源文件夹中(对我来说:/src/main/resources/fxml/
)
我们正在使用 JavaFX 编写 Java 应用程序。此时我们有3种不同的形式:
- 登录
- 游戏window
- 注册
对于我们的下一次迭代,我们想要实现注册表单,但是我们得到了 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();
但这将 return 一个 IllegalStateException: Location is not set。
当我在 /FXMLRegistration.fxml
之前删除 /
时,我到达我的 catch 块打印文件的完整路径:
file:/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% 清楚我是如何安排文件的,请查看 my Github repo
所以,我很好奇地想找出根本原因,我克隆了 repo,发现实际问题是以下错误以及 OP 在问题中发布的错误
Caused by: java.lang.NullPointerException at hackattackfx.FXMLRegistrationController.initialize(FXMLRegistrationController.java:67)
这意味着在控制器中 pane
为空。
这是因为 fxml 缺少 fx:id
的声明。
将 fx:id="pane"
添加到 FXMLRegistration.fxml
的 AnchorPane 声明中,一切正常。
您的路径需要从 /
这对我有用:
final String fxmlPath = "/fxml/Main.fxml";
final FXMLLoader loader = new FXMLLoader(this.getClass().getResource(fxmlPath));
Main.fxml
位于资源文件夹中(对我来说:/src/main/resources/fxml/
)