JAVA 应用程序资源打包!

最近,在搞java 界面的问题,
看着java程序的显示图标实在有点说不过去,便换了一个自己定义的图标。
又引用了数据库驱动和字符串加密解密包。
打包程序发布的时候,忙着手工编写 MANIFEST.MF 文件,生成了运行jar包,同时还附带了
一个数据库驱动包和图片包,虽然可以运行,但是,看着总是不太舒服。
唉,一个小的应用程序每天还得带着两个尾巴到处跑……

上网一搜,发现了一个很好的eclipse插件Fat Jar ,在不需要你配置其他文件的情况下,
他可以将所有资源打包进一个可执行jar文件里面。一阵忙碌之后,新的jar包文件产生了,
迫不及待的点击运行,出乎意外,双击该JAR文件后,在屏幕上一闪之后就消失了。明明在
eclipse里面运行一点问题都没得,没办法,又重新审视下自己的代码:
Image im = Toolkit.getDefaultToolkit().getImage("resource/icon.gif");
setIconImage(im);

同时,上网搜搜,发现其原因是程序中载入图片或文本文件时,使用了以当前工作路径为基准的方式来指定文件和路径。
这与用户运行Jar包时的当前工作路径并不一致。
改写代码如下:
URL imgURL = this.getClass().getResource("/resource/icon.gif");
Image im = Toolkit.getDefaultToolkit().createImage(imgURL);
setIconImage(im);
区别非常细微,仅仅是在“resource”的前面加了一个反斜杠"/",这个反斜杠就表示根目录,没有反斜杠就表示相对路径。
同时将SWT+JFace实现的代码改为:
URL imgURL = this.getClass().getResource("/resource/icon.gif");
Image image = new Image(d, imgURL.getPath());
s.setImage(image);

Eclipse运行正常,打包后,仍然无法运行(原因有待研究),

通过查询API发现Image 还有另外一种形式的构造函数,试着改动代码为:
InputStream imageInputStream = super.getClass().getResourceAsStream("/resource/icon.gif");
Image image = new Image(d, imageInputStream);
this.s.setImage(image);
果然,打包后顺利运行!!
至此,所有的资源文件和引用的jar被整合到一起!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值