JavaFX加载FXML文件报错Location is not set,求解决方案
解决JavaFX "Location is not set" 错误
这个错误的核心问题是FXMLLoader找不到你的FXML文件,根源出在资源路径的写法上。我帮你分析一下问题并给出解决方案:
问题所在
你的代码里写了:
FXMLLoader loader = new FXMLLoader(MainApp.class.getResource("/resources/RootLayout.fxml"));
但根据你的文件结构,resources目录是类路径的根目录(构建工具比如Maven/Gradle会自动把这个目录下的文件打包到类路径根),所以RootLayout.fxml的实际类路径是/RootLayout.fxml,而不是/resources/RootLayout.fxml——你多写了一层/resources/前缀,导致FXMLLoader去类路径下找不存在的resources子目录,自然找不到文件。
解决方案
直接修正资源路径,去掉多余的/resources/前缀:
1. 修改initRootLayout方法
把加载RootLayout的代码改成:
final FXMLLoader loader = new FXMLLoader(MainApp.class.getResource("/RootLayout.fxml"));
2. 修改showFilmeOverview方法
同样,把加载FilmeOverview的代码改成:
final FXMLLoader loader = new FXMLLoader(MainApp.class.getResource("/FilmeOverview.fxml"));
额外排查点(如果修改后还是报错)
- 确认构建工具是否正确复制了FXML文件:检查项目的输出目录(比如
target/classes或build/classes)里有没有RootLayout.fxml和FilmeOverview.fxml,如果没有,需要调整构建配置确保resources目录下的文件被正确打包。 - 检查文件名大小写:Java的资源查找是区分大小写的,确保代码里的文件名和实际文件完全一致(比如不要写成
rootlayout.fxml而实际是RootLayout.fxml)。 - 也可以尝试相对路径:如果你的
MainApp在projeto包下,相对路径写法是MainApp.class.getResource("../RootLayout.fxml"),但绝对路径(开头带/)更可靠,推荐优先使用。
这样修改后,FXMLLoader就能正确找到你的FXML文件,解决"Location is not set"的错误了。
内容的提问来源于stack exchange,提问作者Eduardo Abreu
相关产品推荐
相关产品推荐

