打包含图片的程序怎样设置路径
发布时间:
你将所有的资源打包为and.jar,你的类GUITest.java位于一个包中:packageanducpp;你的图片资源全部放在
images文件夹中,而images文件夹也位于andycp包内。andy.jar$A--
andycpp$B--
GUITest.java$C1images$C2--
Snap1.jpg.
URLimgurl=GUITest.class.getResource("images/Snap1.jpg";ImageIconimg1=newImageIcon(imgURL;
另一种情况,类很多,并且包结构复杂,应该把图片放到最外层,让所有类通过绝对路径来访问该图片:
URLimgurl=GUITest.class.getResource("images/Snap1.jpg";ImageIconimg1=newImageIcon(imgURL;andy.jar$A--
andycpp$B1--
GUITest.javaimages$B2--
Snap1.jpg.
URLimgurl=GUITest.class.getResource("/images/Snap1.jpg";ImageIconimg1=newImageIcon(imgURL;
$$$1.由于jar对大小写的敏感性,因此应注意图片名称的大小写。
2.images前面加“/”这个反斜杠表示根目录,没有“/”就表示相对路径,一、得到classpath和当前类的绝对路径的一些方法
1.FileTest.class.getResource(""得到的是当前类FileTest.class文件的URI目录,不包括自己。
如:file:/D:/workspace/FileDemo/bin/com/test/
2.FileTest.class.getResource("/"得到的是当前的classpath的绝对URI路径。如:file:/D:/workspace/FileDemo/bin/
3.Thread.currentThread(.getContextClassLoader(.getResource(""得到的也是当前ClassPath的绝对URI路径。
如:file:/D:/workspace/FileDemo/bin/
4.FileTest.class.getClassLoader(.getResource(""得到的也是当前ClassPath的绝对URI路径。
如:file:/D:/workspace/FileDemo/bin/
5.ClassLoader.getSystemResource(""得到的也是当前ClassPath的绝对URI路径。如:file:/D:/workspace/FileDemo/bin/
推荐使用Thread.currentThread(.getContextClassLoader(.getResource(""来得到当前的classpath的绝对路径的URI
二、使用相对路径获得资源的绝对路径
以上1,2方法用的是Class.getResource(Stringname方法,3,4方法用的是ClassLoader.getResource(Stringname方法,5方法用的是ClassLoader.getSystemResource(Stringname方法
API中解释:
1、publicURLClass.getResource(Stringname方法委托给此对象的类加载器。如果此对象通过引导类加载器加载,则此方法将委托给ClassLoader.getSystemResource(Stringname方法在委托前,使用下面的算法从给定的资源名构造一个绝对资源名:*如果name以'/'('\u002f'开始,则绝对资源名是'/'后面的name的一部分。
*否则,绝对名具有以下形式:modified_package_name/name
其中modified_package_name是此对象的包名,该名用'/'取代了'.'('\u002e'。
2、publicURLClassLoader.getResource(Stringname查找具有给定名称的资源。资源是可以通过类代码以与代码基无关的方式访问的一些数据(图像、声音、文本等)。
资源名称是以'/'分隔的标识资源的路径名称。
3、publicstaticURLClassLoader.getSystemResource(Stringname从用来加载类的搜索路径中查找具有指定名称的资源。此方法通过系统类加载器(参见getSystemClassLoader()来查找资源。
以上三个方法参数name就是提供输入资源的相对路径,这样即可得到当前classpath下的资源
注意点:
1、尽量不要使用相对于