利用IDEA和exe4j生成exe文件及资源文件和so、dll文件的放置

 

在网上搜索大部分文章,发现并不能完全解决自己的问题时,遂自己摸索,然后总结写下此文。

在贴出具体步骤前,我们需要先换位思考下,假如我们是设计者我们该如何让一个java项目展现在用户面前呢

1.首先得有个java环境吧,才能在jvm上跑你的虚拟机(jre文件夹)

2.跑你的项目,jvm首先得知道你写了啥代码吧(jar包),并且知道这个项目的入口在哪(main函数)

3.假如你项目里用了一些图片音乐,或者三方库资源(三方jar包,so库,dll文件等),你也得告诉jvm在哪里找吧

基于以上三点,我们带着上面的思考来一步一步做吧

 

1.提取出我们写的代码

打开File -> Project Structure,如下图。

依次点击图中的按钮出现“Empty”和"From modules with dependencies"两个选项。

个人见解:其中Empty只会导出你自己写的代码并且已经编译好了,而不会导出你使用的三方jar包里面的代码,虽然你可以手动添加进去,不过只是以添加文件的形式添加进去,并不会给你编译好,如下图

而"From modules with dependencies"选项则会直接帮我们把所以代码(你自己写的和三方引用的)直接放在一起编译,同时直接生成Mainfest文件,可以说是非常快捷的一种方式了,同时体积自然比上一种要大很多,如下图

让我们来看看两个选项的区别吧

然后我们回到编程界面,点击,点击生成我们的jar包文件,当然build和rebuild都可以的,我们生成的jar包文件在之前系统自动给我们设置的地址中(Output directory),假如你没有更改的话是在这里,

我们直接复制粘贴到桌面即可,当然,为了方便我们还是创一个“SoundTool”的文件夹放它

2.提取我们所用到的资源文件和so库

在这里需要提的就是,在项目里引用的资源文件(当然是你直接放在项目里的,比如resource文件夹下)都是使用相对路径的。

题外话,我们在使用URL时经常访问本地地址,这个时候就需要加上“file:///”,"file://"是固定格式,代表是本地文件,而第三个"/"则代表是文件系统的根目录比如“file:///C:/dir”什么的。

而在项目里面我们访问的时候则不需要这么复杂,可以像“src/main/resources/imgs”这么调用,因为没有“/”号则代表的是项目所在的相对路径,所以假如你在项目里引用了资源文件的话你就需要把文件拿出来,并且放置的位置切合你代码里设置的路径,不然程序会找不到

在资源文件设置好了之后,我们就可以考考三方so库和dll文件的事了。因为在导出jar包的时候,so库和dll文件并未参与编译,但是不要慌,设计者们早就考虑好了,让我们们生成exe文件的时候可以让他们参与连接,让exe文件可以知道在哪里去调用他们(感觉其实就是添加了放置so库和dll文件的路径),所以现在我们得先把他们拿出来。

好了,让我们进入最为复杂的一步吧

3.生成exe文件

首先,你需要一个exe4j的程序,程序可以直接百度找到官网下载,下载方式和安装程序非常简单,这里不过多叙述。

注册码如下:
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

之后点击Next下一步

选择使用jar生成exe,点击Next下一步

点击Next下一步

然后点击Next下一步

之后设置so库和dll文件连接的设置

点击Next下一步

然后点击Next下一步

至此,已经大功告成,剩下的设置已经是我们基本不会更改的了,如语言设置什么的,剩下的就是一路Next

让我们来看看最终的目录结构和运行结果吧

功能正常运行,并且成功读取资源文件。美中不足的是,文件夹整个184Mb的大小,jre文件占了150Mb,这一点暂时不知道怎么解决,如果读者知道请务必告诉我

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
exe4j.exe是一个用于将Java程序打包成可执行文件的工具。根据引用\[1\]和引用\[2\]的内容,你遇到的问题是在将Java程序转成exe后,在启动软件时出现了java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory错误。这个错误通常是由于缺少相关的类库或配置问题导致的。 为了解决这个问题,你可以按照以下步骤进行操作: 1. 确保你的Java环境已经正确安装,并且配置了正确的环境变量。 2. 检查你的项目中是否引用了org.slf4j.LoggerFactory类,如果有,请确保相关的依赖库已经正确添加到项目中。 3. 检查你的exe4j配置,确保你已经正确设置了JRE的版本,并将JRE添加到软件中。你可以按照引用\[2\]中的步骤进行操作,将你的JRE添加到exe4j的搜索路径中。 4. 如果问题仍然存在,你可以尝试重新构建你的项目,并重新打包成可执行文件。 希望以上的解决方案能够帮助你解决问题。如果问题仍然存在,请提供更多的详细信息,以便我能够给出更准确的建议。 #### 引用[.reference_title] - *1* [转exe文件出现java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory错误](https://blog.csdn.net/serena_0916/article/details/125193495)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【Java开发 | 工具使用】JAVA使用exe4j打包项目为exe文件](https://blog.csdn.net/m0_66345324/article/details/122838211)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值