说明:
最近学java的GUI编程,一时心血来潮,想把写的小界面程序生成.exe桌面应用程序,可想法简单做起来却遇到了始料未及的许多问题,走了许多弯路。为大家避免同样的错误,我将我使用的也是较为常用的方法整理在此,供大家一同学习!工具:eclipse(或其他能生成JAR包的工具)、exe4j(用于将JAR打包成.exe程序)
步骤:
第一步: 生成JAR包。
1、在编写好的工程文件夹上右键,选择"Export"导出项,依次点击Java——JAR file——next;
2、选择需要导出的工程文件夹,右侧的.classPath和.project文件默认勾选,可以取消。下面的设置JAR File(导出目的地),选择或输入一个目的地文件夹,再在其后加添加导出后的JAR的文件名,如:D:\java程序\计算器.jar,其他项默认,点击next继续设置细节或直接finish。(建议直接finish,简便易行。)
注:关键在于设置导出路径与jar文件名。点击finish可能弹出 警告:JAR export finished with warning.See details for additional information,此警告可能由一些小的细节引起,可以不必在意,只要程序能测试时正常运行就无大碍,点击“ok‘。
3、在所设置的JAR文件导出文件夹下,可以看到导出的JAR文件,如果第二步没有警告,则双击可以直接运行,否则可能无法运行,但不影响成功生成.exe及其运行效果。
第二步:使用exe4j将JAR包打包成.exe文件。
准备工作:下载并安装exe4j(仅4M)。根据自己系统及JDK版本(32位或64位),选择32位或64位exe4j下载安装(华军软件园等都有),其中64位也可用于32位的JDK版本。安装过程简单,无特殊设置。
正式使用:打包过程共十小步骤。
1、打开软件,出现欢迎页,在右下角设置license(注册号),之后next。提供个注册号的网址:
http://down.51cto.com/data/1391905
其中有个本人已验证使用的为:A-XVK222711F-134h5ta8yxbm0
注:不注册则使用的是评估版(30天试用),且每次运行.exe时都会弹出”该程序用exe4j评估版创建“的提示,有些烦人!
2、 选择工程类型为:"JAR in EXE" mode。
3、 Application info步骤:第一个文本框设置应用名称,任意设置;第二个设置打包后输出.exe所在文件夹,一般设置与JAR文件所在相同;next。
4、 Executable info步骤:Executable type:根据自己的项目选择程序类型(界面程序、控制台程序或服务器程序);
Executable name:设置生成的.exe程序的名称;
Icon File:用于设置程序的特殊显示图标,可不选;
Fail if an Exception ……:如果打包不正确,可以尝试不选此项试试;
Change working directory……:默认选上;
( 重点 )点击Advanced Options下拉列表:选择”32-bit or 64 bit“设置使用的JVM类型(与java程序一致),里面仅一个选择项,默认不选择(即默认使用JVM的类型为32位)! 所以即使64位的exe4j,忽略此项也将导致无法正确打包64位的java程序对应的JAR!其他项默认,直接next到进入第5步。
5、Java invocation步骤:直接点击右侧的绿色”+“图标,默认选择Archive项,文本框打开想要打包的JAR包,点击ok,可以看到Class path中出现打开的JAR文件路径。设置Main class文本框,点击右侧的按钮,选择主函数所在的类,点击ok,next。如果需要,可通过左下角的Advanced Options配置本地库目录。
其中有个本人已验证使用的为:A-XVK222711F-134h5ta8yxbm0
注:不注册则使用的是评估版(30天试用),且每次运行.exe时都会弹出”该程序用exe4j评估版创建“的提示,有些烦人!
2、 选择工程类型为:"JAR in EXE" mode。
3、 Application info步骤:第一个文本框设置应用名称,任意设置;第二个设置打包后输出.exe所在文件夹,一般设置与JAR文件所在相同;next。
4、 Executable info步骤:Executable type:根据自己的项目选择程序类型(界面程序、控制台程序或服务器程序);
Executable name:设置生成的.exe程序的名称;
Icon File:用于设置程序的特殊显示图标,可不选;
Fail if an Exception ……:如果打包不正确,可以尝试不选此项试试;
Change working directory……:默认选上;
( 重点 )点击Advanced Options下拉列表:选择”32-bit or 64 bit“设置使用的JVM类型(与java程序一致),里面仅一个选择项,默认不选择(即默认使用JVM的类型为32位)! 所以即使64位的exe4j,忽略此项也将导致无法正确打包64位的java程序对应的JAR!其他项默认,直接next到进入第5步。
5、Java invocation步骤:直接点击右侧的绿色”+“图标,默认选择Archive项,文本框打开想要打包的JAR包,点击ok,可以看到Class path中出现打开的JAR文件路径。设置Main class文本框,点击右侧的按钮,选择主函数所在的类,点击ok,next。如果需要,可通过左下角的Advanced Options配置本地库目录。
6、JRE:设置Minimum即可,不得大于当前使用的jre版本(jdk安装目录下的jre即可);点击下拉列表Advanced Option,点开第一项,文本域中有默认的几项,建议删去JAVA_HOME和JDK_HOME,之后点击”+“图标,选择Directory(默认),点击按钮右侧添加jre(一般从java安装目录复制一份用于此处使用),点击ok,可见文本域中显示出刚添加的jre,next,选择运行环境VM,非服务器端,默认或Client hotspot VM皆可。
7、第7、8步默认next,第9步执行打包,第10步可通过点击按钮”Click Here to Start the Application“测试打包正确与否!视结果返回设置或退出,Save as用于保存配置文件。
8、在指定的.exe生成文件夹,能否找到.exe程序并能在任何指定位数(32或64)机器上运行?!
注:exe4j的每步骤左下方都有个帮助按钮,用于说明当前步骤所设置的内容。
常见错误:一、由于没有执行第二步第4小步的重点项。该信息常易误解为自的jre已损坏,或没有设置EXE4J_JAVA_HOME(无需设置)引起,亦或下载的exe4j版本为32位的。图为64位exe4j提示该错误时先后显示的信息 (对于32位的exe4j,该提示信息可能会有所不同)
8、在指定的.exe生成文件夹,能否找到.exe程序并能在任何指定位数(32或64)机器上运行?!
注:exe4j的每步骤左下方都有个帮助按钮,用于说明当前步骤所设置的内容。
常见错误:一、由于没有执行第二步第4小步的重点项。该信息常易误解为自的jre已损坏,或没有设置EXE4J_JAVA_HOME(无需设置)引起,亦或下载的exe4j版本为32位的。图为64位exe4j提示该错误时先后显示的信息 (对于32位的exe4j,该提示信息可能会有所不同)
此步的默认查找顺序(Search sequence)里默认的三项:Search Windows registry(查找登记信息)、环境变量JAVA_HOME、环境变量JDK_HOME,通过本地测试发现,如果不添加任何jre,三个值里面第一个是必不可少的,否则程序打包后运行时无法找到JVM,即显示下图的错误。
可见如果使用默认的设置,则程序还是依赖于系统所安装的JDK(之中的JVM),那么当将程序放在没有安装JDK的机器上时,程序依旧无法运行,没有实现“跨平台”。如果不需要程序在没有安装JDK的机器上运行, 则默认的设置即可,无需改动,否则必须自己添加jre,即执行第二步的第6步。
此外,单独的添加代表指向jre或jdk的路径的环境变量,也无法找到JVM,即使能找到也不适用,因为不是程序每次移到一台机器上就要添加专门的环境变量和jre。只有通过添加jre文件夹(也即添加了JVM),exe4j通过打包将JVM与JAR”融合“,生成的.exe程序的运行才能不受是否安装JDK的限制。(所谓融合,自己的理解是,生成的.exe运行时自动调用第6步添加的jre,这也即是将jre文件跟.exe文件放在一起的原因)
注:java程序运行依赖于JVM环境,所以生成的.exe仍无法单独在没有安装JDK的电脑上运行(伪脱离JVM),可通过winRAR等系统常用压缩软件,将.exe与jre文件夹压缩成一个自解压格式压缩文件,真正实现任何机器都能运行。
关于怎么生成自压缩文件,搜索" WinRAR如何创建自解压格式压缩文件 "即可。