用Eclipse导出jar包,可能会遇到所用的图片怎么打不到jar中。那么怎样才能把图片导入到jar中,好吧,咱们来简单的说说。分两种编译路径来讲。 java
状况一:eclipse
一、 在Window-Prefences中的Build Path以下:ui
二、 工程temp、包test.sfx及源文件Test.java、存放图片的文件夹images及图片surfing.gif的关系以下:spa
Test.java的源码:.net
package test.sfx;图片
import javax.swing.*;ip
public class Test {资源
JFrame jf=new JFrame("Test");字符串
JLabel jl=null;get
public Test(){
jl=new JLabel(new ImageIcon(Test.class.getResource("/images/surfing.gif")));
jf.add(jl);
jf.setSize(300,300);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}
public static void main(String[] args) {
new Test();
}
}
注意粗体部分的为使用图片的方法Test.class.getResource("/images/surfing.gif"),Test是使用图片所在类的类名,字符串前有/
三、 导出jar包名为test.jar,这个就不用说啦,你们都知道啊
四、 用winrar打开test.jar,以下图
images里存放serfing,gif,sfx里存放的是Test.class。事实上getResource("/images/surfing.gif")的字符串前
【1】 有/时,系统从bin目录开始搜索,找到images,在找到suring.gif的。打成test.jar文件,这个文件就至关于bin,因此由上面的目录树可知依然能够找到图片。当咱们在src中建立images文件夹并把图片放在其中,记得要在工程目录上右击选择refresh,以后运行,eclipse会自动在bin目录下建立一个文件夹images,存放的资源和src下的是同样的。就是说eclipse会将src中的文件夹连同.java文件生成的class文件和资源文件一同放到bin下。打成jar后,jar文件就至关于bin。
【2】 没有/时,是从包目录开始搜索的,因此能够把images放到src/test/sfx下面,以后refresh,运行,会发如今bin/test/sfx下有images,其实道理就是粗体部分所说的啊!
【3】 能够把图片surfing.gif直接放在src/test/sfx下面,那么红体字符串就是surfing.gif
状况二
1、若是在Window-Prefences中的Build Path以下:
2、工程temp、包test.sfx及源文件Test.java、存放图片的文件夹images及图片surfing.gif的关系以下:
3、代码中的红体字符串仍是/images/surfing.gif,这里的搜索就是从工程temp开始的了。打成jar文件后,jar文件也就至关于工程目录。若是是images/surfing.gif,就是从test/sfx开始搜索,因此能够把images放在test/sfx下,注意字符串变成了images/surfing.gif,以后refresh。运行正常,打包也能够运行。
补充
对了还有Test.class.getResource("/images/surfing.gif")能够用
Test.class.getClassLoader().getResource("images/surfing.gif")来替换,这个类加载器,怎么查找实在是复杂。在磁盘上文件位置不变的状况下,代码中这两种写法都是正确的哈。
重点:
咱们把图片导进jar里面,这样才方便程序获取资源。
因而咱们经过,类名.class.getResource("路径");来获取资源的话,在咱们导出的时候就能够把相应的资源一块儿导出。
当咱们使用绝对路径的话,咱们的根目录就是src文件夹(例如:”/example/image.jpg“)
当咱们使用相对路径的时候,咱们的初始相对路径就是对应class所在的文件夹(例如:”example/image.jpg“)