java打包成exe和可移植
问题与思路
大家也许会遇到这样的情况,自己辛辛苦苦的写的java程序,却在别人的电脑上无法运行,这里面可能有这么几个原因:
- 自己的程序依赖外部jar包
- 自己程序打成jar包以后,无法显示图片
- 对方电脑没有java环境
可是java不是具有很好的可移植性吗?有没有办法做一个可以到处执行的java程序呢?网上有各种各样的方法,但是都比较笼统,或者不能实用于一些情况,这里以一个我自己的实践经历作为例子,供大家参考。
核心思路如下:
- 将自己的程序打成jar包
- 将jar包转成exe文件,同时建立jar包依赖关系,和jre环境相对链接
- 制作安装程序
所需软件:
- 当然eclipse必不可少(或者myeclipse)
- exe4j(将jar转成exe)下载:http://www.onlinedown.net/soft/15755.htm
- inno setup(生成安装程序)下载:http://rj.baidu.com/soft/detail/15918.html?ald
详细步骤
1、导出jar包(不做介绍,基本选择默认就足够了,图片和数据库路径问题会在最后讨论),这里建议将导出的.jar文件、jre文件(从你安装Java目录下找)、数据库文件、引入的jar包和exe文件图标(如果这些有的话)都放在一个文件夹下,便于生成安装程序。
2、生成exe可执行文件
首先,安装exe4j这个软件,过程嘛,就不说了,一路next就行了,打开后出现如下界面:
2.0) 这里要求License,如果没有的话也是可以,但是每次运行你的程序就会弹出窗口,所以可以从网上搜下License。(转接这里博客上提供,http://wangyali90516.blog.163.com/blog/static/117205101201232641920294/)
2.1) 左侧选择"Project type",有"Regular mode"和"JAR in EXE",区别就是你程序里引入的jar包,要不要一起打包进exe,其都可以,这里我选第一种吧。点击"next"。
2.2) 出现如下界面
分别是填写应用程序名、打包后exe文件目录、你的jar文件所在目录。填写完成后,点击"next"。
2.3) 出现如下界面
选择GUI application 和 填写exe文件名、图标(可选)。
2.4) 添加你的jar包,和你程序所引入的jar包,并且在下方填写你程序的入口,点击"next"。
2.5) 完成后,填写你所需java环境范围,选择Advanced Options,再选择search sequence:
2.6) 删除默认出现的3个,再选择你的安装文件里的jre文件夹:
2.7) 剩下的几乎一路默认即可
2.8) 点击测试一下,你的程序能不能运行,如果出了问题,可以查看目录下的error.log文件。
3、生成安装文件
这里采用inno setup,主要是这个软件比较“傻瓜化”,当然好用的软件不只一款。
3.1) 这个软件安装也是一路Next,运行后,出现如下,选择,点击ok。
3.2) 出现如下,点击next,
3.3) 再点next.
3.4) 选择exe文件,和程序运行所需文件,可以将直接放在同一个文件夹里exe、jre、图标、数据库文件等都加进来。
注意:直接将整个文件夹加进来即可
3.5) 剩下我的就不罗嗦了吧,大家根据自己的需求弄即可。
注意事项
如果你的java程序包含了图片,那就要考虑路径的问题。我这里采用相对路径,示例代码如下:
new ImageIcon(getClass().getResource("/Image/首页.jpg"))
其中Image是我工程里一个文件夹,在打包时,选择
如果你的java程序里包含了数据库连接(我这里使用的是access数据库),也建议采用相对路径。这样,只需将数据库文件Psychologp.mdb放在jar文件的同一目录下即可。
1 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 2 DriverManager.getConnection("jdbc:odbc:data","",""); 3 String path = System.getProperty("user.dir"); 4 String DBConnstr = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ="+path+"/Psychology.mdb"; 5 Connection con = DriverManager.getConnection(DBConnstr); 6 Statement stmn =con.createStatement();