图片放在res下,将程序打包后,要想显示出图片,程序代码必须是:      URL imageUrl = MyText.class.getResource("/res/notepad.png");Image image = toolkit.createImage(imageUrl);1.打包(将src和res一起打包)后运行程序能正确显示图片,但为什么在eclipse中运行此程序却显示:
                                             Uncaught error  fetching image:
                                             java.lang.NullPointerException
                                    at sun.awt.image.URLImageSource.getConnection(Unknown Source)
    请问是什么回事?2.要想在eclipse中运行程序时能显示图片,代码必须是:Image image = toolkit.createImage("././res/notepad.png");
   但打包后却不能显示图片。
   请问这是为什么?3.把MyText.class.getResource("/res/notepad.png");的路径改为./res./notepad.png打包后就不能运行程序?但在eclipse   中运行要想显示图片,路径却必须是./res./notepad.png。请问这又是为什么?         请各位指教!还有麻烦各位跟我详细的讲解下引用资源文件的相对路径问题。谢谢了!

解决方案 »

  1.   

    干脆把你的图片和类放在一起,这样就可以直接用MyText.class.getResource("notepad.png");
    也不会错了
      

  2.   

    什么版本的eclipese
    看试不像程序问题 而是工具问题
      

  3.   

    Image image = toolkit.createImage("././res/notepad.png"); 别用相对路径
    用绝对路径啊~~~
    相对路径用不好很容易出问题的~
    而且有时候可能你觉得是对的,但是就是不行。
    所有最好用绝对路径
      

  4.   

    没有给出目录结构~~不好分析。
    如果在某个 jar 中的 class 中使用 getResource("/.....")获取资源时,是从 jar 包中虚拟目录(虚拟目录是我自命名的。。理解下就是了。呵呵)的根目录开始查找。
    例如 jar 中存在:"/temp/test.txt" 如果使用 getResource("/temp/test.txt")。则可以找到指定资源
    而如果不是在 jar 中的 class 使用  getResource("/.....")获取资源时,是从 classPath 下,按照参数(即/.....) 指定的路径查找。
    例如 classPath 为 G:/class/ 。且存在  G:/class/temp/test.txt 则 getResource("/temp/test.txt")。则可以找到指定资源
      

  5.   

    还是不明白。
    目录结构就是一个project的目录结构,将资源文件放在res文件夹下。
    将程序打包后,要想在别的机子上用到资源文件必须用相对路径吧?
      

  6.   

    getResource(filePath); 这样获取的路径就是相对路径。只是你要弄清 filePath 是相对于哪?
    如果你将你的程序打成 jar 。且 filePath 是以 /  开头。那么程序将认为 filePath 是相对于 jar 包中“虚拟目录” 的根目录。
      

  7.   

    java sdk中有DEMO啊,看一下应该能明白的;
      

  8.   

    且 filePath 是以 /  开头。那么程序将认为 filePath 是相对于 jar 包中“虚拟目录” 的根目录。-----"相对于 jar 包中“虚拟目录” 的根目录"是指哪个目录?
      

  9.   

    其实问题很简单,我们用一个程序看看:
    (1)用Eclipse建立一个工程WriteFree放在e:\everywork\cwf目录下,然后在工程中放入资源文件res/resource.txt
    (2)在WriteFree工程下编写代码:
             File f1=new File("res/resource.txt");
             System.out.println("f1:"+f1.getAbsoluteFile());
             File f2=new File("/res/resource.txt");
             System.out.println("f2:"+f2.getAbsoluteFile());
        运行结果如下:  f1:  e:\everywork\cwf\WriteFree\res\resource.txt
                        f2:  e:\res\resource.txt
    (3)结果很明显,f2是不可能找到resource.txt文件的。原因
    1、res/resource.txt路径大家都知道,是相对路径,它是相对于当前目录而言,在上面的例子中,当前目录是Eclipse工程WriteFree所在的目录e:\everywork\cwf\WriteFree\,所以在这个目录下寻找res/resource.txt是没有问题的。
    2、/res/resource.txt这种以'\'开头的路径就有点迷惑性了
        通常我们使用"/"来表示根目录,/res/resource.txt就表示resource.txt文件在系统的根目录上的res目录里。但是这样使用对于初学者来说是具有风险性的,因为要知道这里所指的根目录并不是你的当前目录,而是你资源所在的服务器的根目录,也就是说根目录是e:/。因此在e:/下寻找/res/resource.txt是不可能的。所以LZ改成
    Image image = toolkit.createImage("res/notepad.png"); 应该就可以在Eclipse工程下寻找到了。