利用 EXE4j 生成 .exe Java Swing程序
大上周刚刚了结一个桌面软件项目。这个项目需要用到
SNMP
协议,我刚开始尝试使用不熟的C#,但始终无法ping通目标主机,反而是Java一下就通了,看来还是熟悉的东西比较稳妥。但是用Java的话,大家都懂的~~~(宝宝心里苦啊)
Java 搭建桌面程序不是不可以,而是需要面临很多棘手的问题。软件编写完成后,本来以为大功告成,奈何还要解决编译、打包、如何运行在别人的机器上等等诸如此类的问题,麻烦的要命。这真的要感谢很多前辈的博文,给了我很多启发,帮助我渡过难关。现将自己所经历的一切总结成文,希望可以帮助到各位同仁,大家一起愉快的玩耍岂不美哉(嘿嘿嘿嘿~~~)
文章涉及软件与技术
- 打包工具:exe4j 6.0【提取码:9vpx】、Inno Setup 5【提取码:64ss】
- 项目技术选型:
JDK1.8(32/64 涉及到使用此软件电脑的版本)
,Druid
,Commons3
,Commons-Email
,Lombok
,Dbutils
- 数据库:
Access(驱动:ucanaccess)
- 其它:
软件图标(.ico)
文章目录
- 工程说明
- 准备工作
- 导出程序
- 转换为“.exe”可执行程序
- 常见BUG总结
- 拓展
- jre 瘦身
- 整个工程打包为安装程序
- 鸣谢
工程说明
- 首先对工程目录做下说明。
src目录
下,二十几个包,就不打开了。主要说下,为什么有两个resources目录
。利用EXE4j
将项目打包成.exe
后,配置文件会被一起打包,为了实现配置独立,又将resources目录
独立出一份。这样做之后,resources文件夹
要和.exe
可执行程序处于同一文件目录下,程序才能加载到配置文件。当然,也可以在代码中自定义配置文件路径,但那样做之后,可能会在路径问题上耗费较多时间(例如我,log4j
日志生成目录弄了半天) - 当前这个工程,我是将
log4j
配置文件,加入到maven
下的resources
里面的,但在最后生成时,我是将这个文件,放到外层的resources
里,和其它配置文件处于同一目录。这样的原因是,如果在Eclipse
里面,直接将log4j
配置文件放到外层的resources
里面,会出现加载不到该配置文件的情况(我想把这几个配置文件独立出来,所以没有采用默认路径加载,而是自加载的方式),所以在Eclipse
里面测试时,log4j
配置文件就放在maven
管理的resouces
下了。只要log4j
配置文件可以正常加载,生成日志的文件路径,就不用操心了。 images
后期没有改动的需求,一并加入到resources
管理
准备工作
- Java程序是运行在
虚拟机
上的,所以别人的电脑要想运行Java程序必须要有Java环境,即jre
。而我的程序要运行在32位电脑上,所以就需要准备32位的jre
,64位同理; - exe4j软件;
- 桌面程序需要软件图标,准备一个
ico
图片,并不是必要的。
导出程序
- 程序右键 --> Export…
- 选择“Runnable JAR file(可执行JAR包)”–> next
- 配置如下:
- “Library handing”:我选择的第一项
-
- Extract required libraries into generated JAR:把所有的import JAR都拆开来,包含在JAR的各个目录中,ex. net/org/xxx.class
-
- Package required libraries into generated JAR:把所有的import JAR都包在JAR的根目录下
-
- Copy required libraries into a sub-folder next to the generated JAR:把所有import JAR放在JAR外面独立的一个文件夹
-
- 如果程序依赖于其它包,就在“Library handling”处选择“Package required libraries into generated JAR”或“Copy required libraries into a sub-folder next to the generated JAR”,如果选择后者,导出时,会将需要的包拷贝到一个目录中,后面引用这个JAR包时,必须将这个目录拷到JAR包所在的目录。
- 配置完成后,点击“Finish”。如果看到下面的警告不要害怕,只是一个警告而已。提示大致意思是生成的项目有警告(不影响程序运行,但可能是一个未知的隐患)。如果你的代码中有黄色告警,那么到这里,是肯定会弹出这个提示框的。
- 不用理会,点击OK!我的输出路径是桌面,快看看。
- 这个“jar”已经可以执行了,但那是因为我的机器里有“java”运行环境,复制到别人的电脑上是没用的。现在将它转换为“.exe”可执行程序
转换为“.exe”可执行程序
- 在桌面创建一个文件夹,将
.ico图标
、jre(根据自身情况选择)
、配置文件(上面已经说明了配置文件的情况)
,放到里面,就想像下图
- 开始使用工具
EXE4J
,启动该软件,来到欢迎页。这里可以选择程序转换“模板”或注册该软件。点击“next”
- 第二步,选择如下,next
- 配置如下,其中第二项,我的输出位置应该选择
第一步
创建的文件夹,已经存放了之前准备好的“32位jre”.配置完成,点击next
- 配置完成后,点击左侧树状结构“Redirection”
- “Allow only a single running instance of the application”,表示同一时间只有一个程序可以被启动。即多次点击程序图标,只能运行一个程序窗口。
- 这里可以配置程序的日志文件。注意,这个日志和
log4j
完成没关系,应该是exe4j2
将Java控制台输出的日志信息以这种方式输出。该文件生成的日志与.exe
程序同级。配置完成后,点击“Version info” - 这里的配置其实可以忽略,有兴趣的可以看看
- 如果你的程序是64位,就要勾选它。我的程序运行在32位系统上,不能勾选。
- 来到“Java invocation”,先点击右侧的“+”,添加“jar”程序
- 这里有个小BUG,弹出的对话框,点击打开路径选择弹窗无效,只能手动录入了~~~~这里选择的,就是我们通过
Eclipse
生成的jar 文件
- 点击“OK之后”,回到刚才的窗口,发现多个一条记录,选中它,然后看下图。通过选择可执行
jar
文件,exe4j
就能加载出它包含的所有类,我们就需要选择入口类。 - 这里可以配置虚拟机参数:
-Dfile.encoding=utf-8
是设置了utf-8的编码,以防中文乱码;
- 接着“next”,来到“JDK”版本选择;
- 配置好之后,选择“advanced Options”–> “Search sequence”.刚进来是下图这样,不用理这三个家伙
- 这里是配置
jre
的。exe4j2
最后生成的".exe"要想在别人的电脑上运行,就需要告诉它jre
在哪里。这里,当然要填上第一步
已经准备好的jre
路径。所以,这个配置的意义,就是最后生成的".exe"是要和jre
一起打包给别人的,这样".exe"才能找到jre
,在别人的电脑上运行。 - 点击最右侧绿色的“+”就会弹出下图的对话框,选择已经准备好的“32位JRE”
- 导入自己的“jre”文件后,删除其它三项,特别注意的是,一定要删除
JAVA_HOME
或JDK_HOME
这两个默认配置,因为它会保存你本机的JAVA_HOME
地址,给别人用时,就会出现路径找不到的错误;
- 跳过第7步,到第8步,可以选择语言
- 到这里,点击“next”,第九步自动解析,之后自动来到最后,大功告成!这一系列操作之后,就可以将这一过程,保存为一个模板,用相同的配置快速转换另一个程序了。
- 快看看成果吧!如下图。图中没注释的文件,都是我提前放进去的。和工程里的配置文件一样,这样就做到了配置文件分离了!程序启动后,日志文件自动保存到log文件夹中。备注:生成的程序,完美在XP32位系统运行,美滋滋!
- 启动界面
常见BUG总结
- 如果最终生成的程序,放到别人的电脑上无法运行,有一部分原因是下图的路径不对,具体原因我说不明白,我找了很久,只有一篇博客提到了,但那篇博客我找不到了。大体意思就是,不能配置绝对路径,应该使用相对路径。但是我使用绝对路径生成的程序,放到别人的电脑上是可以运行的,所以不清楚他为什么会有这个问题。放在这里给需要的小伙伴。
- 绝对路径的配置
- 相对路径的配置: 重要: “程序主文件夹”前,要加
..\
来表示上级目录,exe4j
才能加载到入口类
- 打包后的程序报如下错误:就是
jre
位数不对,程序放在什么系统运行,就使用相应的位数jre
即可解决。
拓展
exe 生成是编写Java桌面程序的最重要关卡,通过这道门,以后的事情就简单很多。如果想把事情做到最完美,还可以考虑以下问题。
jre 瘦身
- 现在面临的问题是,exe程序很小,才十几M。可jre实在太大了,java8的jre有170M(我滴靠~~)给别人不太方便。jre 的瘦身就成为了一个新的问题(当然,如果不在乎体积大小的,也就不是问题了)
- jre 瘦身非常麻烦,我综合了若干博客,让jre缩小了100M左右,再通过压缩软件,最终生成的安装程序只有30M左右,已经是我可以接收的范围了,就没有继续做到极致。做到极致的话,未压缩状态的jre应该可以做到10M以下,但那样需要消耗很多精力,我也就懒得弄了。
- 相关文章如下(按有效程度排序):
- http://www.cnblogs.com/cjdty/p/9057845.html
- https://blog.csdn.net/sinat_34820292/article/details/80808126
- https://blog.csdn.net/xiaoping8411/article/details/6973887
整个工程打包为安装程序
- 想让“.exe”在别人的电脑上运行,就需要“jre”,而且程序还需要其它的配置文件,总不能直接把这些东西打包到一个压缩包直接给人家用吧?不太专业。要想办法弄一个安装程序给人家用,才符合大公司的做派不是?
- 我使用的是“Inno Setup 5”,这个软件的教程网上有很多,我也就不再拙述了。
鸣谢
• https://blog.csdn.net/u012454773/article/details/49724127/
• https://www.cnblogs.com/luhan/p/5985360.html
利用 EXE4j 生成 .exe Java Swing程序相关推荐
- java应用程序利用Exe4j打包exe文件
java应用程序利用Exe4j打包exe文件 今天上课给学生介绍利用Myeclipse打jar包和exe文件,随便就随手写了下文档供大家参考,希望对大家有用. 1. 使用简介: 把java ...
- AidLearning安装Oracle JDK让Java Swing程序在华为MatePadPro平板上跑起来
AidLearning安装Oracle JDK让Java Swing程序在华为MatePadPro平板上跑起来 cemike@126.com 入手华为MatePadPro平板以后就有把windows台 ...
- 解决 GTK+/GNOME 3 环境下 Java Swing 程序使用本地 GTK+ 主题时菜单无边框 bug 的方法...
在 GTK+/GNOME 3 环境下采用默认的 Adwaita 主题时,Java Swing 程序如果使用本地 GTK+ 主题会出现菜单无边框的 bug,这个问题也可能在其他常用的 GTK+ 主题中出 ...
- 利用exe4j生成java的exe文件
使用集成开发工具IDEA生成jar文件 File->Project Structure 2. Artifacts->加号->JAR->From modules with dep ...
- python生成exe运行慢_利用pyinstaller生成exe文件碰到的一些问题及解决方法
在"开源图像标注工具labelme的安装使用及汉化"这篇博客中,使用pyinstaller将labelme项目的入口python文件main.py打包,生成了main.exe文件, ...
- 利用pyinstaller生成exe文件碰到的一些问题及解决方法
在"开源图像标注工具labelme的安装使用及汉化"这篇博客中,使用pyinstaller将labelme项目的入口python文件main.py打包,生成了main.exe文件, ...
- 给java swing程序添加背景音乐或音效
"在平时做小程序中我们可能会想在程序中加上一些背景音乐和音效,以下是我使用的方法(非本人原创)." 源码如下: package Wuzi;import javax.sound.sa ...
- Qt打包生成exe: 无法定位程序输入点
问题现象 编译完成后,直接执行会提示系统错误:找不到Qt5Gui和Qt5Core.dll等动态库. 解决措施 使用windeployqt.exe打包工具,一次性收集所需要的dll文件,与exe文件一起 ...
- idea 使用exe4j生成exe文件并且附带jre运行环境(亲测有效)
转载地址: https://blog.csdn.net/qq_40794266/article/details/88691936
- java swing开发窗体程序开发(一)GUI编程
Java SWing就是java提供的一个类库专门用于开发窗体程序的,相对于C#的winform,java swing的开发要比C#更加麻烦,他不像C#拥有可视化的界面编辑工具 而是需要像QT一样纯代 ...
最新文章
- isinstance函数和@staticmethod用法
- 机器学习 聚类篇——DBSCAN的参数选择及其应用于离群值检测
- linux GCC、GDB、Makefile
- 项目使用ts辅助_我如何建立辅助项目并在第一周获得31,000名用户
- 设计一个扩展自抽象类geometricobject的新的triangle类_面向对象设计原则之开放封闭原则(开闭原则OCP)...
- SyntaxError: Non-ASCII character ‘\xe4‘ in file baseline.py on line 18, but no encoding declared;
- hadoop入门手册5:Hadoop【2.7.1】初级入门之命令:文件系统shell2
- AndroidStudio:设计一个能在图片上涂鸦的程序
- Nexus Indexer 2.0:增量下载
- 88年的世界杯历史,用Python带你回顾!
- Process terminated
- 手机抠图怎么变透明底?这个抠图方法快收藏起来
- 昆特牌显示无法连接至服务器,巫师之昆特牌总是显示无法连接网络
- oppo r11 r11t解BL锁安装面具magisk详细教程
- OpenCV每日函数 thinning函数(细化)
- 部编版是什么版本_人教版是部编还是统编
- 远道知学院| 名下有很多子公司,每个都要独立申请知识产权吗?
- 微信公众平台上可以使用的API接口
- python学习 day7_字符串、列表的相关操作
- 家里WiFi慢?几招帮你解决