Java程序转exe,让程序在没安装jre环境的电脑运行

Fri Oct 09 17:39:05 CST 2015 4829 Java

文章摘要将JAVA桌面程序转成windows的exe可执行文件,听起来觉得似乎没这个必要;用其他擅长在windows做桌面程序的语言来做貌似更好,例如C++等,而且方便多了。但是对于初学编程,初学JAVA的同学们,如果自己有个得意的JAVA程序作品,是不是也很想把它弄成exe可执行文 件,让其可以在没有安装JRE的机子上运行,分享给自己的好友们呢?我将介绍一种简单有效的方法。

之前我在网上找过很多这方面的文章,发现网上有很多方法虽然能将java程序转成exe文件,但是也还是需要在安装了JRE的机子上运行,而 且还要求JRE的32位或64位版本与编译JAVA程序的JDK版本一致,转了exe等于白转。这些方法是用exe4j, JSmooth等免费工具转 的,用此类工具转的exe文件都要求有JRE才能运行,或者将JRE打包过去才能用。

好了,题外话不多说。

下面进入正题:

使用“JAVA应用定制工厂”达到我们的目的

这是一款能分析精简你JAVA程序的JAR包(也就是说事先你需要将你的java程序 打包成jar文件,eclipse会用吧?嘻嘻~~),并根据你java程序的类分析结果精简JRE,制作出一个能在没有安装JRE的windows环境 中打开执行的exe文件;这不仅免除了手动精简JRE的麻烦,也自动生成了EXE文件。这是一个针对Java轻量级桌面应用进行精简优化的小工具。亲测可用。

这个原理其实就是将JRE搬到目标机子上,通常JRE体积比较大,如果直接一起把 JRE打包发布你的JAVA程序,一个helloworld程序的体积就大得惊人,这样的效果是我们不想要的。这就需要我们去根据自己的JAVA程序去精 简JRE,将你JAVA程序需要用到的JRE里面的东西打包即可。网上精简JRE的方法很多,但是对于初学者来说,看这些方法感觉好像看天书一样吧~~但 是使用“Java应用定制工厂”来做的话,快捷方便多了。下面介绍下亲测过程。

下面以我把用JAVA写的“一庥记账工具”转成exe文件的过程为例截图说明大致步骤:

1.打开JCB.exe程序(JAVA应用定制工厂),文件→新建工程,输入JCB工程名,选择JCB工程目录位置,确定。

2.出来的界面里,在“选择应用程序jar包”里添加你java程序的JAR包(如果有用到第三方包的话,也加进来)。

3.在“运行环境设置”那里选择项目的main class,启动路径默认为空,一般来说无需指定。然后设定应用程序参数和虚拟机参数。接着在“选择JRE”处选定需要精简的JRE(一般为“使用当前运 行时的JRE”),JCB当前支持1.4-1.7版本的JRE,未来可能会支持更高版本的JRE。

4.右下角有2个单选按钮:全部重新运行和增量运行。全部重新运行就会放弃之前的运行 结果(第一次选这个),增量运行就是会保留以前的运行结果。然后点击“以Verbose模式运行”按钮。Verbose模式运行Java程序,会显示 JVM加载的全部类信息,JCB需要这些类信息进行JRE的精简,所以请尽可能的把应用所有的功能尽可能的跑一遍,跑的越全面,导致精简出错的可能性就越低。


5.全部运行过程序的功能后,可以点选项卡上面的“Verbose模式运行结果”查看 类列表,这里不需要做什么,看看就行了。接着我们点选项卡上面的“类依赖分析”,在这里分析类的依赖关系。分析类依赖模式有2个选项:重新完全分析和增量 分析。完全分析会花费较多的时间。当使用verbose模式增量运行后,可以使用增量模式分析类依赖项,这样可以节约大量的时间。类依赖分析会反编译所有 运行的类,分析类引用关系,但是无法获取Class.forName这类动态类加载信息,所以需要Verbose模式运行的尽量全面,以避免这些动态加载 的类的缺失。这一步可能需要几分钟时间,耐心等候吧。
(为什么需要分析类依赖关系呢?因为不同的操作系统,不同的硬件配置,JRE可能会采取策略模式加载不同的类,或者一些异常,Verbose模式一般不会 加载,这样换个硬件环境,仅仅使用Verbose模式的类可能会导致ClassNotFound这样的异常,导致Java程序崩溃。)

类依赖分析类依赖分析截图

6. 点选项卡上面的“定制与精简jar包”,精简JRE有两种模式:使用 Verbose运行结果和使用类依赖分析结果。前者只包含Verbose分析出来的类,精简出来的JRE包很小,但是基本不具备跨平台性。所以一般来说推 荐选择后者。如果你的程序包含Swing的客户端,并且比较复杂的话,最好选中包含Swing选项。因为Swing的设计完全是动态化的加载,全部使用 Class.forName方式,类依赖分析对Swing是无效的。当然选中该选项后,JRE的体积会增加许多。比较好的解决方案,是使用SWT替代 Swing进行开发,或者尽量把你的程序跑全面,包括各种异常界面都跑出来。右下角有两个按钮,是用来自定义类和资源文件的,比如移除JAR包的MD5文 件或者无用的文件。或者测试运行发现ClassNotFound异常,手动把缺少的类加进去,然后JCB会自动运行增量类依赖分析加载所有可能需要的类。 最后点击的“精简Jar包”按钮,就可以对JRE进行精简了,精简完毕后可以点击“查看精简结果”按钮进行查看。

精简jar包

精简jar包

7.jar包精简完成后,可以看见左侧的“定制JRE”按钮已经激活可用了。我们点击 它。这时界面会显示根据你上一步的操作精简JRE后的结果(JCB会自动分析所有的Class,生成精简版JRE,包括需要的JAR,DLL和资源文 件)。一般来说精简出来的JRE,普通功能都能正确完成,但是不排除有些功能不能正常使用,比如缺少某个资源文件或者DLL,需要手工添加(如果你开始时 用Verbose模式运行程序时把程序所有功能都跑过的话,这种情况出现概率比较低)。一般情况这里也不需要进行什么操作,直接点选项卡上面的“运行测 试”,选择main class,选择启动路径(比如文件系统、音效文件、图片资源等目录,如果不需要的话为空,应用程序参数,虚拟机参数一样)。最后点运行程序,这里最好也 把程序的所有功能都跑一遍,确保JRE精简无误。

8.上一步运行测试完毕后,点击JCB左侧的“构建可执行程序”按钮,可以看见“定制 Java应用软件包”界面,如果你的程序需要运行目录的话(比如文件系统、音效文件、图片资源等),在这里你可以将你的运行目录加到软件包文件列表里。之 后点选项卡上的“创建可执行程序”,在这里设置你的exe文件配置即可。(在“Java应用程序打包设置”那里建议选择“只使用精简JRE”)。设置完后 点击底下的“打包并编译”,很快,你的exe程序就出来了。

JAVA应用软件打包设置

JAVA应用软件打包设置


 使用“JAVA应用定制工厂”转出来的exe文件,在打包发布分享的时候要将整个output文件夹中的内容打包发布,内含精简后的JRE,所以体积不会很大。

JAVA应用定制工厂使用手册:http://www.blogjava.net/cnfree/archive/2013/03/03/395999.html

JAVA应用定制工厂官方下载地址:http://sourceforge.net/projects/jcb/ (好像速度比较慢)

JAVA应用定制工厂下载http://pan.baidu.com/s/1zlcrW (百度网盘上的下载地址)

刚接触Java很容易产生把Java程序做成exe这样的想法,等到了解Java到一定程度了,就会感觉到Java不像VB,Delphi这样只是一个语言,而是一个平台。jar是最常用的部署单元,做成exe没什么意思。


有不少网友跟我讨论了一些问题:在将比较复杂的程序转EXE时,往往出问题。JAVA应用工厂对于一些复杂的java程序可能处理得不是很好,或者使用过程中忽略了一些细节,比如少导入了一些必须的第三方jar。




打赏
打赏

分享到: