最近写了一些JavaFX的程序,并将它们打包,过程中看了不少网上的博客与教程。对于开发经验不多的我来说,解决一个个问题无疑是一个很大的挑战,所幸最后在自己的努力和他人的帮助下完成了整个过程。鉴于JavaFX并非十分流行,如今网络上教程时效性也有很大问题,我写了这样一篇博客,来为准备使用JavaFX来开发程序的朋友们提供一些帮助。
注:该篇博客仅讲解创建、构建、打包JavaFX的项目的流程,由于JavaFX语法体系整体随时间变化不大,可以参考网络上的一些博客与视频教程。
Java 8:
因为JDK8中集成了JavaFX,所以在JDK8环境下创建JavaFX程序很简单。只需像创建普通Java项目一样创建项目,在代码中导入JavaFX相关包即可编写并直接运行即可运行JavaFX程序。
Java 8+:
在JDK8后的JDK版本不再集成JavaFX,我们需要自己向项目中引入JavaFX,所以创建JavaFX项目会复杂一些。
我们此处采用创建Maven或Gradle项目并引入依赖的办法来引入JavaFX。如果不使用Maven,也可以在Project Structure中通过给项目添加依赖的方式,来使用和运行JavaFX程序。但是此种方式不利于管理项目,在后续打包过程中也会遇到许多困难与问题,所以不推荐。
此处以Maven为例:
第一步:创建Maven项目
(关于Maven依赖和插件下载慢的问题,可以自行百度,将下载源改为国内镜像,并调整Maven设置。)
第二步:在pom.xml文件中添加如下代码,导入依赖。
org.openjfx
javafx-controls
19.0.2.1
org.openjfx
javafx-fxml
19.0.2.1
第三步:在pom.xml文件中添加如下代码,导入插件。
org.apache.maven.plugins
maven-compiler-plugin
3.10.1
19
org.openjfx
javafx-maven-plugin
0.0.8
default-cli
这里填你的主类名称
app
app
app
true
true
true
添加插件之后,可以看到右边的maven侧栏多出了选项。
并将javafx-maven-plugin中的主类设置成该入口类。
设置完毕后,点击maven侧栏中plugin项下的javafx:run即可运行项目。
另外,高版本的idea支持一键创建maven包裹的JavaFX项目。
此种创建方式与上面的效果相同。
Java 8:
第一步:打开Project Structure设置界面,点击Artifacts,添加JavaFX Application。
第二步:在JavaFX一栏中的Application class中选择入口类,然后Apply设置。
第三步:点击Build,然后选择Build Artifacts,然后选择刚刚创建的Artifact,等待构建成功。
打包完毕后即可在out\artifacts中找到对应的jar文件。
Java 8+:
第一步:在pom.xml文件中添加以下代码,添加maven-shade-plugin。
org.apache.maven.plugins
maven-shade-plugin
3.2.2
package
shade
example
第二步:重新加载maven设置,在mainClass标签中填入你的主类(以src/main/java文件夹为参照目录)
第三步:在maven侧栏中启动package。
此时,在项目文件夹中,会生成target文件夹,里面包含了所产生的jar文件。
当然,在Java 8+的JRE下无法运行该jar,因为Java 8+中已经不再集成JavaFX。若要直接运行,需要添加特定的VM Options,有兴趣的可以百度搜索一下。
第一种方法:使用exe4j将jar文件转成exe(Java 8以及Java 8+都适用)。
首先,准备好之前构建好的jar文件,以及编译所使用的jdk版本对应的jre或jdk本身,并将它们放在同一目录下。
第一步:下载、安装并打开exe4j。(过程就不过多赘述,相信各位利用互联网能轻松解决这个问题)
第二步:正确进行打包设置。
此处的license相信各位有办法解决,当然可以不添加license,不过这样打包出来的exe会有水印。
此处勾选第二个选项,以让没有JRE的使用者能正确运行程序。
此处设置应用名称与输出目录。
此处设置exe文件名。
此处单击加号,在弹出窗口中选择将被打包的jar文件,再在下方选择main class。
此处填入支持的最低与最高JRE版本号,然后点击高级选项中的search sequece。
如图,删除其中的所有内容并添加已准备好的并与jar文件放在同一文件夹下并与输出目录相同的文件夹相同的JDK或者JRE。以保持相对路径,使无Java环境与JavaFX依赖的使用者能正常使用项目。然后一直点击下一步,直至打包完成。
此处点击按钮可以测试打包出的exe是否可用。
测试可用后,即可将exe文件与JRE或JDK一同打包成zip或者exe安装文件。
注:此种方法打包,由于需要包含完整的JDK或JRE,在体积上具有劣势。可以通过定制JRE的方式进行解决,有兴趣的朋友们可以搜索一下方法。对于高版本来说,还有另一种打包方法,也可以避免这一劣势,如下。
第二种方法:使用javafx-maven-plugin中的jlink直接打包项目,再将其中的bat文件转换为exe文件(适用于Java 8+)。
第一步:在源码目录下添加module-info.java文件,内容如下:
module com.example.demo {
requires javafx.controls;
requires javafx.fxml;
opens com.example.demo to javafx.fxml;
exports com.example.demo;
}
注意:此处的几个包名为程序入口类所在的包名,请确保入口类由至少一个包进行包裹。
第二步:在maven侧栏中点击javafx:jlink。
第三步:过程结束后,在target\app\bin中应该能找到一个叫做app.bat的批处理文件。
点击之后,应该能成功运行JavaFX程序。
之后,可以通过一些工具将bat文件转换为exe文件并添加图标,然后将应用程序打包或者制作成安装程序。此处就不过多赘述了,相信各位应该能够利用互联网自行解决。
以上即为Java 8与Java 8+版本中JavaFX项目的创建,构建,打包流程。以上步骤我均自己操作过一遍,如果发现问题,欢迎私信与我交流。其他关于JavaFX的问题也可以在私信中提出。如果这篇博客有帮到您,不要忘记点一个赞。