利用 EXE4j 生成 ".exe" Java Swing程序

22 篇文章 19 订阅
6 篇文章 0 订阅

大上周刚刚了结一个桌面软件项目。这个项目需要用到SNMP协议,我刚开始尝试使用不熟的C#,但始终无法ping通目标主机,反而是Java一下就通了,看来还是熟悉的东西比较稳妥。但是用Java的话,大家都懂的~~~(宝宝心里苦啊)

Java 搭建桌面程序不是不可以,而是需要面临很多棘手的问题。软件编写完成后,本来以为大功告成,奈何还要解决编译、打包、如何运行在别人的机器上等等诸如此类的问题,麻烦的要命。这真的要感谢很多前辈的博文,给了我很多启发,帮助我渡过难关。现将自己所经历的一切总结成文,希望可以帮助到各位同仁,大家一起愉快的玩耍岂不美哉(嘿嘿嘿嘿~~~)

文章涉及软件与技术

工程说明

  1. 首先对工程目录做下说明。src目录下,二十几个包,就不打开了。主要说下,为什么有两个resources目录。利用EXE4j将项目打包成.exe后,配置文件会被一起打包,为了实现配置独立,又将resources目录独立出一份。这样做之后,resources文件夹要和.exe可执行程序处于同一文件目录下,程序才能加载到配置文件。当然,也可以在代码中自定义配置文件路径,但那样做之后,可能会在路径问题上耗费较多时间(例如我,log4j日志生成目录弄了半天)
  2. 当前这个工程,我是将log4j配置文件,加入到maven下的resources里面的,但在最后生成时,我是将这个文件,放到外层的resources里,和其它配置文件处于同一目录。这样的原因是,如果在Eclipse里面,直接将log4j配置文件放到外层的resources里面,会出现加载不到该配置文件的情况(我想把这几个配置文件独立出来,所以没有采用默认路径加载,而是自加载的方式),所以在Eclipse里面测试时,log4j配置文件就放在maven管理的resouces下了。只要log4j配置文件可以正常加载,生成日志的文件路径,就不用操心了。
  3. images后期没有改动的需求,一并加入到resources管理
    在这里插入图片描述

准备工作

  1. Java程序是运行在虚拟机上的,所以别人的电脑要想运行Java程序必须要有Java环境,即jre。而我的程序要运行在32位电脑上,所以就需要准备32位的jre,64位同理;
  2. exe4j软件;
  3. 桌面程序需要软件图标,准备一个ico图片,并不是必要的。

导出程序

  1. 程序右键 --> Export…
    在这里插入图片描述
  2. 选择“Runnable JAR file(可执行JAR包)”–> next
    在这里插入图片描述
  3. 配置如下:
    在这里插入图片描述
“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包所在的目录。
  1. 配置完成后,点击“Finish”。如果看到下面的警告不要害怕,只是一个警告而已。提示大致意思是生成的项目有警告(不影响程序运行,但可能是一个未知的隐患)。如果你的代码中有黄色告警,那么到这里,是肯定会弹出这个提示框的。在这里插入图片描述
  2. 不用理会,点击OK!我的输出路径是桌面,快看看。在这里插入图片描述
  3. 这个“jar”已经可以执行了,但那是因为我的机器里有“java”运行环境,复制到别人的电脑上是没用的。现在将它转换为“.exe”可执行程序

转换为“.exe”可执行程序

  1. 在桌面创建一个文件夹,将.ico图标jre(根据自身情况选择)配置文件(上面已经说明了配置文件的情况),放到里面,就想像下图
    在这里插入图片描述
  2. 开始使用工具EXE4J,启动该软件,来到欢迎页。这里可以选择程序转换“模板”或注册该软件。点击“next”
    在这里插入图片描述
  3. 第二步,选择如下,next
    在这里插入图片描述
  4. 配置如下,其中第二项,我的输出位置应该选择第一步创建的文件夹,已经存放了之前准备好的“32位jre”.配置完成,点击next
    在这里插入图片描述
  5. 配置完成后,点击左侧树状结构“Redirection”
  • “Allow only a single running instance of the application”,表示同一时间只有一个程序可以被启动。即多次点击程序图标,只能运行一个程序窗口。
    在这里插入图片描述
  1. 这里可以配置程序的日志文件。注意,这个日志和log4j完成没关系,应该是exe4j2将Java控制台输出的日志信息以这种方式输出。该文件生成的日志与.exe程序同级。配置完成后,点击“Version info”在这里插入图片描述
  2. 这里的配置其实可以忽略,有兴趣的可以看看
    在这里插入图片描述
  3. 如果你的程序是64位,就要勾选它。我的程序运行在32位系统上,不能勾选。
    在这里插入图片描述
  4. 来到“Java invocation”,先点击右侧的“+”,添加“jar”程序
    在这里插入图片描述
  5. 这里有个小BUG,弹出的对话框,点击打开路径选择弹窗无效,只能手动录入了~~~~这里选择的,就是我们通过Eclipse生成的jar 文件
    在这里插入图片描述
  • 点击“OK之后”,回到刚才的窗口,发现多个一条记录,选中它,然后看下图。通过选择可执行jar文件,exe4j就能加载出它包含的所有类,我们就需要选择入口类。在这里插入图片描述
  • 这里可以配置虚拟机参数:-Dfile.encoding=utf-8是设置了utf-8的编码,以防中文乱码;在这里插入图片描述
  1. 接着“next”,来到“JDK”版本选择;
    在这里插入图片描述
  • 配置好之后,选择“advanced Options”–> “Search sequence”.刚进来是下图这样,不用理这三个家伙在这里插入图片描述
  • 这里是配置jre的。exe4j2最后生成的".exe"要想在别人的电脑上运行,就需要告诉它jre在哪里。这里,当然要填上第一步已经准备好的jre路径。所以,这个配置的意义,就是最后生成的".exe"是要和jre一起打包给别人的,这样".exe"才能找到jre,在别人的电脑上运行。
  • 点击最右侧绿色的“+”就会弹出下图的对话框,选择已经准备好的“32位JRE”
    在这里插入图片描述
  • 导入自己的“jre”文件后,删除其它三项,特别注意的是,一定要删除JAVA_HOMEJDK_HOME这两个默认配置,因为它会保存你本机的JAVA_HOME地址,给别人用时,就会出现路径找不到的错误;
    在这里插入图片描述
  1. 跳过第7步,到第8步,可以选择语言
    在这里插入图片描述
  2. 到这里,点击“next”,第九步自动解析,之后自动来到最后,大功告成!这一系列操作之后,就可以将这一过程,保存为一个模板,用相同的配置快速转换另一个程序了。
    在这里插入图片描述
  3. 快看看成果吧!如下图。图中没注释的文件,都是我提前放进去的。和工程里的配置文件一样,这样就做到了配置文件分离了!程序启动后,日志文件自动保存到log文件夹中。备注:生成的程序,完美在XP32位系统运行,美滋滋!在这里插入图片描述
  • 启动界面
    在这里插入图片描述

常见BUG总结

  1. 如果最终生成的程序,放到别人的电脑上无法运行,有一部分原因是下图的路径不对,具体原因我说不明白,我找了很久,只有一篇博客提到了,但那篇博客我找不到了。大体意思就是,不能配置绝对路径,应该使用相对路径。但是我使用绝对路径生成的程序,放到别人的电脑上是可以运行的,所以不清楚他为什么会有这个问题。放在这里给需要的小伙伴。
  • 绝对路径的配置
    在这里插入图片描述
  • 相对路径的配置: 重要: “程序主文件夹”前,要加..\来表示上级目录,exe4j才能加载到入口类
    在这里插入图片描述
  1. 打包后的程序报如下错误:就是jre位数不对,程序放在什么系统运行,就使用相应的位数jre即可解决。
    在这里插入图片描述
    在这里插入图片描述

拓展

exe 生成是编写Java桌面程序的最重要关卡,通过这道门,以后的事情就简单很多。如果想把事情做到最完美,还可以考虑以下问题。

jre 瘦身

  1. 现在面临的问题是,exe程序很小,才十几M。可jre实在太大了,java8的jre有170M(我滴靠~~)给别人不太方便。jre 的瘦身就成为了一个新的问题(当然,如果不在乎体积大小的,也就不是问题了)
  2. 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

整个工程打包为安装程序

  1. 想让“.exe”在别人的电脑上运行,就需要“jre”,而且程序还需要其它的配置文件,总不能直接把这些东西打包到一个压缩包直接给人家用吧?不太专业。要想办法弄一个安装程序给人家用,才符合大公司的做派不是?
  2. 我使用的是“Inno Setup 5”,这个软件的教程网上有很多,我也就不再拙述了。

鸣谢

https://blog.csdn.net/u012454773/article/details/49724127/
https://www.cnblogs.com/luhan/p/5985360.html

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值