我用如下代码加载图片:
URLClassLoader urlLoader=(URLClassLoader)this.getClass().getClassLoader();
  URL url=null;
  Image image=null;
  url=urlLoader.findResource(fileName);
  image=Toolkit.getDefaultToolkit().getImage(url);
  MediaTracker mediaTracker=new MediaTracker(this);
  try
  {
     mediaTracker.addImage(image, 0);
     mediaTracker.waitForID(0);
  }
  catch(InterruptedException e)
  {
     e.printStackTrace();
     image=null;
  }
  if(mediaTracker.isErrorID(0))
     image=null;
在Eclipse下运行,未打包前运行完全正常,可是打包之后就出错
Uncaught error fetching image:
请教下这是怎么回事,如何解决?

解决方案 »

  1.   

    换一下图片的放置位置,因为在Eclipse中可能把class文件和代码源文件分开后,这样class文件就会被放在bin文件夹下,这时的classloader对应的地方是bin的父目录,而不是bin文件夹。如果不把源文件和class文件分开就可以省很多麻烦。
      

  2.   

    可以针对我的这个问题说明一下吗,jar包中我已经装图片装进去了,而且bin目录下已加了images目录,在Eclipse下完全正确的,只是打包后出错了。
      

  3.   

    试试把图片跟JAR文件放在一个文件夹下。也许可以,我用JBULIDER时是这样解决的。。
      

  4.   

    skydove() ( ) 信誉:100    Blog   加为好友  2007-06-08 18:18:55  得分: 0  试试把图片跟JAR文件放在一个文件夹下。也许可以,我用JBULIDER时是这样解决的。。
    还是不行
      

  5.   

    我也正在遇到和楼主一样的麻烦,我引用图片的方式和楼主有一点不同:
       ImageIcon icon = new ImageIcon(getClass().getClassLoader().getResource("res/about.png"));我也是在Eclipse里面正常运行,但是打包成JAR之后,就爆出找不到资源的错误。怎么解决呢?
      

  6.   

    elivs_wu() 
    你所用的方法跟我本质上是一样的,呵呵我的问题已解决,原来是文件名大小写的问题,打成JAR包后,原先在Eclipse环境下被忽略的大小写在JAR运行时发生问题,建议你查看下大小写,尤其是扩展名的大小写。
      

  7.   

    这好象是路径的问题,你试试你那个路径查找方法是把jar文件当做前根目录,还是把系统目录当作根目录?
      

  8.   

    我也遇到跟楼主同样的问题,不过我用的是这种形式ImangeIcon icon=new ImageIcon("search.gif");
    JButton but=new JButton(icon);但始终不显示图片,试了好多次,都没成功,楼主介绍的方法也都试过了,但还是不行
    但我一直相信这应该跟图片存放路径有关,但改了又改仍没显示PS:非得把图片打成jar吗?我的最直接的就是跟写的类文件放到同一目录下面了
      

  9.   

    Oasis85() 
    你直接使用文件名读取文件的话只能把文件放到类文件的同目录下,要更改图片文件路径只能使用
    getClass().getSource()或getClass().getClassLoader()来读取
      

  10.   

    可以针对我的这个问题说明一下吗,jar包中我已经装图片装进去了,而且bin目录下已加了images目录,在Eclipse下完全正确的,只是打包后出错了。
    ---------------------------------------------
    看一下是不是图片文件名的大小写问题,在jar包中的文件名对大小写敏感。
      

  11.   

    Inhibitory() 
    感谢!诚如你所说,正是这个问题导致找不到图片。
      

  12.   

    在你的程序中添加这个方法:
    private Image getImage(String filename){
            URLClassLoader urlLoader = (URLClassLoader)getClass().getClassLoader();
            java.net.URL url = null;
            Image image = null;
            url = urlLoader.findResource(filename);
            image = Toolkit.getDefaultToolkit().getImage(url);
            MediaTracker mediatracker = new MediaTracker(this);
            try{
                mediatracker.addImage(image, 0);
                mediatracker.waitForID(0);
            }
            catch(InterruptedException _ex){
                image = null;
            }
            if(mediatracker.isErrorID(0))
                image = null;
            return image;
        }
    调用getImage("image/image.png");
    这样我没有遇到过问题.我是在eclipse的项目中的src目录下建的image目录,
    打包后的目录结构是这样的
    kkgui(目录)
    kkplayer(目录)
    META-INF(目录,包含MANIFEST.MF)
    image(目录,存放图片)
      

  13.   

    shmilycharlene() 
    感谢,我的做法跟你给出的一样,我的问题已经解决了,Thank you all the same
      

  14.   

    如果想打成包的话,取图片最好是这样子取
    this.getClass().getClassLoader().getResource("com/ming/1.png");