1、前言
最近工作中碰到的需求:要求做一款桌面应用程序,用于连接Linux系统并具有运维功能的工具,要求win运行,通过界面操作,但界面不要求很漂亮。
由于我本身主攻Java,后端相对熟悉,经过一番搜索了解到:
- 首先Java开发GUI不是主流
- 在Java开发GUI的历史中,第一阶段awt,第二阶段swing和swt,第三阶段是javafx,因此选定JavaFX进行开发。
- jar包完成后,希望包装成exe提供。
假设jar包已经写好的情况下,一定会碰到的问题是jar包怎么包装成exe应用程序,从而提供给其他人支持进行运维操作,并且要解决现场的win上没有jre环境的问题。
经过一番搜索,发现可以借助exe4j这款工具,那么这篇文章就是介绍一下exe4j的安装和使用,来完成jar包到exe应用程序的转换。
2、准备
准备工作:
- 一个已经完成并且可以正常启动的jar包。
- exe4j,一个可以将jar转换成exe的工具,按照下面的步骤安装和激活即可。
3、exe4j的安装和激活
步骤:
-
下载地址:https://www.ej-technologies.com/download/exe4j/files
进入网址,选择需要的版本,点击下载即可。注意,exe4j 6.0需要jdk版本为1.8及以上。
下载完成很简单,基本上直接下一步就可以搞定。
-
安装完成后运行软件,点击Enter License。
用户名和公司随便填写即可,注册码下面的随便复制一个即可。
A-XVK258563F-1p4lv7mg7sav A-XVK209982F-1y0i3h4ywx2h1 A-XVK267351F-dpurrhnyarva A-XVK204432F-1kkoilo1jy2h3r A-XVK246130F-1l7msieqiwqnq A-XVK249554F-pllh351kcke50 A-XVK238729F-25yn13iea25i A-XVK222711F-134h5ta8yxbm0 A-XVK275016F-15wjjcbn4tpj A-XVK275016F-15wjjcbn4tpj
4、jar包装成exe的操作步骤
步骤:
-
选择"JAR in EXE" mode,进入下一步。
-
输入应用名称(打包后程序的名字)和输出路径(打包后程序保存的路径),点击下一步。
-
选择"GUI application",必须填写exe运行程序名,图标路径可以忽略,这里不勾选“电脑上只能运行一个程序”的选项。
-
点击高级选项,选择“Redirection”,不修改默认错误日志输出路径,点击下一步。
-
Service options页面直接点击下一步,Version Info页面直接点击下一步。
-
如果是64位操作系统,需要勾选,点击下一步。
-
Manifest options页面直接点击下一步。
-
导入你想要转化成exe的jar,以及项目中所有依赖的jar包。
-
添加运行的主类,点击下一步。
-
配置JRE版本,选择高级选项中的“Search sequence”。
-
将本地的jre复制到exe输出路径,以便后续提供给没有jre环境的其他人使用,并且点击“+”,添加本地的jre
- 这个目录就是我在步骤2配置的输出路径。
- 上图是我本地jre的目录
- 添加本地的jre,这里可以直接用相对路径,即当前目录下的jre
这一步如果不配置,exe到了其他人电脑上会报错提示找不到类,如下:
java.lang.NoClassDefFoundError: javafx/application/Application at java.base/java.lang.ClassLoader.defineClass1(Native Method) at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016) at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174) at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800) at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698) at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621) at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) at com.exe4j.runtime.LauncherEngine.launch(LauncherEngine.java:80) at com.exe4j.runtime.WinLauncher.main(WinLauncher.java:94) Caused by: java.lang.ClassNotFoundException: javafx.application.Application at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ... 11 more
-
将添加的jre上移到队列首位,点击下一步。
-
选择“Client HotSpot VM”,点击下一步。
-
后续的两个页面都直接点击下一步。
-
exe转换完成,可到输出目录下找到并双击运行。
-
测试成功后,可以将exe连同jre一起打包到其他人电脑上,测试是否可以运行。都可以的话,就大功告成了!
使用过程中有问题请留言或私信!