You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

基于Java SE 14.0.2与IntelliJ IDEA,导出JavaFX项目为双击运行可执行文件

将JavaFX 项目导出为双击运行的可执行文件(Java SE 14.0.2 + IntelliJ IDEA)

我刚好有过用Java 14和IDEA打包JavaFX应用的经验,这就给你一步步讲清楚怎么弄,保证用户双击就能跑,不用装任何额外东西:

一、前期准备

  • 确保你的JavaFX项目在IntelliJ IDEA中能正常编译、运行,没有报错
  • 确认IDEA的Project SDK已设置为Java SE 14.0.2(File → Project Structure → Project)
  • 已将JavaFX 14.0.2 SDK配置到项目中:
    1. 打开File → Project Structure → Libraries
    2. 点击+ → Java → 选择你本地JavaFX SDK的lib目录,点击OK

二、推荐方案:生成带内置JRE的原生可执行文件(无需用户装Java)

这个方案会把自定义JRE和应用打包在一起,用户拿到手双击就能运行,完全不用配置。

步骤1:把项目改成模块化结构(如果还不是的话)

JavaFX打包依赖模块系统,所以需要在src/main/java下创建module-info.java文件,示例代码如下(替换成你自己的模块名和包名):

module com.yourcompany.yourapp {
    requires javafx.controls;
    requires javafx.fxml; // 如果你用了FXML界面,就加这行
    opens com.yourcompany.yourapp.controller to javafx.fxml; // FXML控制器所在包,需要开放给javafx.fxml
    exports com.yourcompany.yourapp; // 导出主类所在的包
}

步骤2:用IDEA生成模块化可执行JAR

  1. 打开File → Project Structure → Artifacts
  2. 点击+ → JAR → From modules with dependencies
  3. 在弹出的窗口中,选择你的主类(就是包含main方法的那个类)
  4. 勾选Include in project build,点击OK保存
  5. 点击顶部菜单栏的Build → Build Artifacts → 选择你刚才创建的JAR → Build
  6. 生成的JAR文件会在项目根目录的out/artifacts/[你的JAR名称]文件夹下

步骤3:用jlink生成自定义JRE镜像

打开IDEA底部的Terminal,切换到项目根目录,执行以下命令(记得替换成你自己的路径和名称):

jlink --module-path "D:/javafx-sdk-14.0.2/lib;out/artifacts/YourAppJar/YourApp.jar" --add-modules com.yourcompany.yourapp --output custom-jre

参数说明:

  • D:/javafx-sdk-14.0.2/lib:替换成你本地JavaFX SDK的lib目录路径
  • out/artifacts/YourAppJar/YourApp.jar:替换成你刚才生成的JAR文件路径
  • com.yourcompany.yourapp:替换成你module-info.java里的模块名
  • custom-jre:生成的自定义JRE目录名,你可以随便取

执行成功后,项目根目录会多出一个custom-jre文件夹,这就是我们的轻量版JRE。

步骤4:用jpackage生成原生可执行文件

Java 14中jpackage是预览特性,所以命令要加上--enable-preview参数,根据你的系统选择对应的命令:

Windows系统:

jpackage --enable-preview --name MyJavaFXApp --input out/artifacts/YourAppJar --main-jar YourApp.jar --main-class com.yourcompany.yourapp.Main --runtime-image custom-jre --type exe --win-console false
  • --name MyJavaFXApp:替换成你的应用名称
  • --win-console false:如果是GUI应用,加这个参数可以不让控制台窗口弹出来

Mac系统:

jpackage --enable-preview --name MyJavaFXApp --input out/artifacts/YourAppJar --main-jar YourApp.jar --main-class com.yourcompany.yourapp.Main --runtime-image custom-jre --type app-image

执行完成后,你会在当前目录得到一个可执行文件(Windows是.exe,Mac是.app包),用户双击就能直接运行,完全不需要装Java或者做任何配置。

三、备选方案:生成可运行JAR(需用户有Java环境)

如果只是想生成可运行JAR(但用户需要提前装Java 14),可以这样做:

  1. 按照步骤2生成JAR后,右键JAR文件 → Open In → Explorer/Finder
  2. 创建一个批处理文件(Windows是.bat,Mac是.sh),内容如下:
    Windows批处理:
    java --module-path "D:/javafx-sdk-14.0.2/lib" --add-modules javafx.controls,javafx.fxml -jar YourApp.jar
    
    Mac脚本:
    java --module-path "/path/to/javafx-sdk-14.0.2/lib" --add-modules javafx.controls,javafx.fxml -jar YourApp.jar
    
  3. 用户双击这个批处理/脚本文件就能运行,但需要用户本地有Java 14和JavaFX SDK,所以不推荐这个方案。

常见问题排查

  • jlink报错:检查--module-path里的路径是否正确,模块名是否和module-info.java一致
  • jpackage报错:确保Java 14的bin目录在系统环境变量PATH里,或者直接用完整路径执行jpackage
  • 运行exe时闪退:可以去掉--win-console false参数,打开控制台运行exe,查看报错信息

内容的提问来源于stack exchange,提问作者Jasminaa

火山引擎 最新活动