做出java程序后通常需要制作成jar文件,这时原有程序中带有的图片、音乐等资源可能没有正确导入,导致jar文件运行时没有图片甚至无法运行。

本文简单介绍下如何在运行jar文件时也能够显示出程序原有的图片,音乐等资源。

首先可以使用eclipse和netbeans或者其它编程软件来打包jar文件,个人认为netbeans做GUI时会省事不少,在打包jar文件时也非常简单,但在编程手感上还是更喜欢eclipse。

 

切入正题,

netbeans打包jar时只需点击如图所示的锤子即可,jar文件自动保存在所在项目目录下的dist里面。

java多张图片生成压缩包导出_jar文件

java多张图片生成压缩包导出_打包jar_02

 如果你的程序包含了图片音乐等资源,那么你可能是这样写的。

setIcon(new ImageIcon("Image\\0.png"));

这样在运行jar文件时是无法显示图片的,因为找不到图片位置。

第一种解决方法是把图片和音乐粘到当前目录下即可,如图。

java多张图片生成压缩包导出_java多张图片生成压缩包导出_03

这时在运行程序就可以正确找到位置了,其中lib是加载的第三方jar包,打包jar文件时会自动添加。

仔细观察会发现,其实在打包的jar文件(用压缩软件打开)里已经包含了所有需要的图片和音乐,只是由于没有找到正确的位置所以无法显示。

所以,第二种解决方法是直接把图片等放到jar文件中去,这时需要修改调用图片的方式。

修改为如下形式。

setIcon(new ImageIcon(getClass().getResource("/0.png")));

注意斜杠的方向,实际上就是绝对路径,两种方法都能实现,但是实际上调用的图片是两个不同的路径。

java多张图片生成压缩包导出_java多张图片生成压缩包导出_04

实际上是调用了Class.getResource()方法,返回结果为url类型。

如果不明白可以输出一下看看。

System.out.println(getClass().getResource(""));    //file:/C:/NetBeansProjects/Snow/build/classes/snow/
System.out.println(getClass().getResource("/"));    //file:/C:/NetBeansProjects/Snow/build/classes/
System.out.println(getClass().getResource("xxx.class"));    //file:/C:/NetBeansProjects/Snow/build/classes/snow/xxx.class
System.out.println(getClass().getResource("/xxx.class"));    //null

第一句,输出存放该程序的所有class文件的目录。

第二句,会输出classpath的根目录。

第三句,会输出xxx.class所在目录。

第四句,xxx.class不在classpath根目录下,所以会输出null。