Mac M2环境下JavaFX Maven项目运行报错Exit value:1求助
排查修复步骤
1. 核对资源文件路径与加载写法
- 确保资源文件(如FXML、图片)放在Maven默认的
src/main/resources目录下,这是项目编译时资源的根目录。 - 调用
getResource时的路径要匹配资源位置:- 若资源在
src/main/resources/login.fxml,路径需写"/login.fxml"(开头带斜杠,从资源根目录定位); - 若资源和
LoginScene.java同包(比如src/main/resources/com/example/game/login.fxml对应com.example.game.LoginScene),可直接写"login.fxml"。
- 若资源在
- 注意路径大小写:Mac文件系统默认不区分大小写,但打包后可能出现匹配问题,尽量保持路径与文件名完全一致。
2. 检查Maven资源打包配置
打开项目pom.xml,确认资源目录和JavaFX插件配置正确:
<build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*</include> <!-- 确保所有资源被打包 --> </includes> </resource> </resources> <plugins> <plugin> <groupId>org.openjfx</groupId> <artifactId>javafx-maven-plugin</artifactId> <version>0.0.8</version> <configuration> <mainClass>你的主类全路径</mainClass> <!-- 替换为实际主类,比如com.example.game.Main --> </configuration> </plugin> </plugins> </build>
执行mvn clean package重新打包,查看target/classes目录,确认资源文件已被正确复制进去(比如target/classes/login.fxml是否存在)。
3. 修正资源加载代码
替换原有的ClassLoader.getResource调用,改用当前类的getResource方法,可靠性更高:
// 替换原来的ClassLoader.getResource逻辑 URL url = LoginScene.class.getResource("/login.fxml"); if (url == null) { throw new IllegalArgumentException("未找到指定资源: /login.fxml"); } // 后续调用url.toExternalForm()
4. 检查IntelliJ运行配置与缓存
- 打开Run/Debug Configurations,确保JavaFX运行配置的VM参数正确指定了JavaFX模块路径与依赖:
--module-path /你的JavaFXSDK路径/lib --add-modules javafx.controls,javafx.fxml - 执行
Build -> Rebuild Project清理编译缓存,再重新运行项目。
5. 确认JavaFX SDK适配M2架构
- 确保下载的JavaFX 22 SDK是arm64架构版本(M2芯片属于arm64),不要使用x86_64版本。
- 在IntelliJ的
File -> Project Structure -> Libraries中,检查JavaFX SDK的路径是否指向arm64版本的lib目录。
6. 模块化项目额外配置
如果项目使用了module-info.java,需在其中声明模块依赖与资源开放:
module com.example.game { requires javafx.controls; requires javafx.fxml; opens com.example.game to javafx.fxml; // FXML需要访问的包需开放 exports com.example.game; // 若资源在特定包下,需开放该包 opens com.example.game.resources to javafx.fxml; }
内容的提问来源于stack exchange,提问作者giacomo giaco
相关产品推荐
相关产品推荐

