引用:http://www.cnblogs.com/southginger/archive/2011/12/07/2279470.html
上一节中写了一个读取蓝牙GPS接收器中的数据的UI程序,现在将把这个程序生成exe可执行文件,我们只需双击exe文件即可启动程序,而无需再在cmd窗口中执行。
网络上搜索了些Java生成exe文件的相关资料,方法还是蛮多的,如下:
1) 使用InstallAnywhere等工具,将应用程序和JRE一起打包,制作一个exe的安装包。
在安装过程中,用户可以选择使用他机器上的JRE或是这个安装包内的JRE来运行程序。这是很常见的一种做法,显得比较专业,而且原来的程序不需要作任何改动,安装后的程序即在JVM上运行,可以获得原本的效果。如JBuilder就是这么做的。InstallAnywhere中一个压缩的JRE大概是8M,它可以针对linux、win、mac等多个操作系统打包。
2) 使用JET、gcj等工具,将应用程序制作成一个真正的exe文件。
采用这种方式做成的exe文件可以直接在没有安装JRE的计算机上运行。Java类库全部被编译成dll,变为本地调用。
JET是收费的(从http://www.excelsior-usa.com/jetdlevala.html可以下载3.6试用版)。JET安装好以后,它要把系统上安装的JDK编译一下,要等很久。如果JDK是1.4.2_05版还需要打一个补丁。
gcj有windows和Linux版,直接下载zip包,不需要安装。里面有不少例子,一些build的批处理文件。从原理来说,gcj自己实现了JVM规范,当运行用gcj制作的exe(大约2M)时会启动里面的一个小型jvm,在上面跑应用程序。不过,gcj目前还不能完整地支持Swing。
但不管怎样,把Java做成纯exe实在是吃力不讨好,有很多限制,文件又大。
3) 使用exe4j制作伪exe文件。
原理:可执行的jar包文件可以通过命令行java -jar jarfile.jar来执行。制作伪exe其实做法一样,只不过做成exe,调用系统中的java.exe来运行它。
一般情况下,exe4j做成的可执行文件仍需JRE支持,也就是说只能在安装了JRE的计算机上运行。不过有一种方法可制作伪exe文件,在没有安装JVM的机器上也能运行:虽然exe4j并不提供将JRE打包的功能,但是它提供如何搜索JRE的方法。在第六项设定[JRE]中有一步[Search sequence],添加一个Directory方式的搜索入口,指定是相对目录“.” ,然后把JRE目录中的bin和lib两个目录复制到你的发布目录中就可以了。(当然你可以不用当前目录“.”,任何当前目录下的其他目录也可以,比方“./JRE”之类的)。此时发布目录中生成的exe文件就在运行时就会调用当前目录中的JRE,而不是通过系统注册表及环境变量寻找JRE了,所以只要把整个发布目录(含exe及JRE的bin和lib)复制到其他计算机上,也就实现了“目标机即便没有安装过JRE也可以执行”。当然,这种发布方式无法得到一个内含JRE的单独的exe文件。另外,JRE的完整目录有50M,但是我们的程序只可能调用其中很少的一部分,你可以手动为发布目录中的JRE减肥、去掉不使用的文件,但这需要一定的经验。减肥后的JRE根据应用程序的不同,最小可以只有10M左右。
4) 把java应用程序最后做成applet。
将java applet编入html文件,用浏览器方式打开,可以在任何没有安装JRE的机器上运行,好比exe文件一样(当然在安装了JRE的计算机上也可以用批处理文件或java命令来运行)。Windows IE打开applet靠的是一个叫“micosoft VM”的东西,现在该软件一般都是自带的。不过,Windows IE支持的JDK最高版本只能到JDK1.1。如果别人的机器运行不了applet,无非这三个原因:
a. 程序编译时使用的JDK版本太高,Windows IE不支持。用较老板版本的编译器重新编译(v1.1之前)就可以了。比如在dos下javac -target 1.1 *.jav(强制使用JDK1.1编译源程序)。
b. 用户的Windows没有micosoft vm(这种情况比较少见,只有windows XP第一版等极少数情况)。这种情况下,当客户的IE每次load applet时候, Windows会提示“没有download micosoft VM”,他只需从网上下一个就可以了。
c. 用户计算机上装有一些保护ie的软件(比如最新的windows sp2有时就会防止java applet的loading)。暂时关闭保护功能就可以了。
5) 使用JBuilder、exe4j等工具制作成需要JRE支持的exe文件。
exe4j制作伪exe文件
在这里我使用的是exe4j,在CSDN上查到的一个下载exe4j地址:http://download.csdn.net/source/1581378
解压后,先安装程序,装完后运行,然后用Keymaker.exe生成一个序列号,输入到程序里面License Information即可。
1) exe4j的启动界面,点击Next开始创建配置文件。
2) 选择类型。
我们选择第一个,这样可以保证程序仍具有跨平台的特性。如果选择第二个,可以把程序完全编译成exe文件,可以更好的保护我们的程序不被反编译。
3) 设置程序的短文件名,源文件夹路径以及要生成的exe文件的存放目录。
exe存放目录必须指定到源文件夹下。
4) 设置生成的exe文件名称,还可以给它指定一个ico类型的图标等。
5) 添加程序中所用到的类路径
点击+号添加类路径,基本上所需要用到的Jar文件都要添加上去,可以逐个添加,也可以添加整个文件夹或者使用系统环境变量,为了使程序能够随处运行,建议使用相对路径,并且不要使用环境变量。
例如:可以将程序源代码打包成Jar包,选择“Archive”添加或者可以将源代码编译后存放在文件夹中(文件夹中至少要包含程序的class文件),选择“Directory”添加。
添加需要的其他Jar包
指定程序的启动类
6) 设置程序需要的jre版本
设置自带的jre
为了更好的分发程序,我们选择自带jre,所以就必须把我们自带的jre指定为首选的运行环境。
默认情况下程序会去系统的注册表,环境变量及相关的目录查找jre,我们只需要自带的jre,所以这里吧默认的选项移除,然后添加自己的jre所在的目录路径。
7) 可以给程序添加一个启动画面,一直Next就可以了。
最终生成了一个执行文件BluetoothGPS.exe
图为我的程序目录:
BluetoothGPS文件夹:存放源代码
jre文件夹:存放JRE(可以把整个JDK安装目录拷贝过来或是只拷贝其中的jre)
Lib文件夹:存放其他需要的Jar包
BluetoothGPS.exe:生成的可执行文件