IntelliJ Idea中从嵌套目录加载FXML资源失败求助
解决IntelliJ修改项目结构后FXML嵌套目录加载失败问题
问题本质
出现"Location is not set"错误,核心是编译后的classpath里找不到指定的FXML文件,根源是修改项目结构后,资源目录的识别规则或编译输出路径出现异常。
具体解决步骤
确认resources目录的资源根标记
右键项目中的resources目录,选择Mark Directory as -> Resources Root。必须让IntelliJ将其识别为资源根目录,这样编译时才会自动把目录下所有文件(包括嵌套目录里的FXML)复制到classpath对应路径下。检查编译后的资源输出
打开项目的target/classes(或out/production/classes,取决于构建工具)目录,确认里面存在views文件夹且home-view.fxml在其中。如果没有:- 打开
File -> Project Structure -> Modules,选中你的模块; - 切换到
Sources标签,确认resources目录的Type是Resources,且Excluded列表未包含views目录; - 切换到
Paths标签,确保Output path和Test output path指向正确的编译输出目录。
- 打开
调整FXML加载路径写法
尝试两种可靠的写法:- 使用类加载器加载(从classpath根目录查找,无需开头的
/):FXMLLoader homeSceneFXMLLoader = new FXMLLoader(SASAApplication.class.getClassLoader().getResource("views/home-view.fxml")); - 使用相对类路径加载(若
SASAApplication在项目根包下,直接写相对路径即可):FXMLLoader homeSceneFXMLLoader = new FXMLLoader(SASAApplication.class.getResource("views/home-view.fxml"));
- 使用类加载器加载(从classpath根目录查找,无需开头的
清理并重建项目
执行Build -> Clean Project,再执行Build -> Rebuild Project,清除旧编译缓存,确保资源文件被重新复制到输出目录。
内容的提问来源于stack exchange,提问作者vperse
相关产品推荐
相关产品推荐

