我用eclipse写的代码,里面用到了一些gif图片
我使用如下方法拿到imageIcon:
public static ImageIcon getImageIcon(String name, String desc)
    {
        java.net.URL url = ClassLoader.getSystemResource(name);
        if(url == null)
        {
            url = HImage.class.getResource("/"+name);
        }        ImageIcon img = (url != null) ? new ImageIcon(url) : null;
        return img;
    }
其中name是我image所在的位置:images/pro/java/icons/16x16/Left.gif
其中images/pro/java/icons/16x16/ 是我在eclipse的project建立的一个包这种方法在我直接从eclipse里面运行程序的时候是没有问题的
但是,当我用eclipse将代码打成jar包,双击jar包运行的时候,界面启动就非常的慢
出来的界面就是一片灰白...这是怎么回事

解决方案 »

  1.   

    url = this.getClass().getResource("/"+name);
      

  2.   

    这个容易理解java.net.URL url = ClassLoader.getSystemResource(name);这行代码使用相对路径,在IDE里直接运行是可以的,因为你的images目录正好在当前路径下。如果没有猜错,你的images目录应该在project目录下,也就是和source、classes目录在同一个目录下。但是在jar情况下,当前路径就是jar所在的目录了,也就是java或javaw被执行的地方,而images目录在jar文件内,所以上面的代码不起作用,而你这段代码        if(url == null)
            {
                url = HImage.class.getResource("/"+name);
            }也无法起作用,因为它用了绝对路径,Class.getResource()认为的根目录应该是class文件的根目录。我解决这个问题的方法是把images目录放在class文件所在的目录下,而只用HImage.class.getResource("/"+name);这种方式来获取image,这样两种方式下都可以执行。
      

  3.   

    to chongkai()
       你说的非常清楚,谢谢,但是有一点我还是不明白
       如你所说当我打包jar之后
       if(url == null)
            {
                url = HImage.class.getResource("/"+name);
            }
       这段无法起作用,那么我在双击运行的时候应该是不能加载那些left.gif图片才对吧
       可我的程序却是起来就是一片灰白,但是,你鼠标在上面点一点却又是可以看到那些图片的
       你鼠标一松开,又没有了   我想如果是如你所说的话,应该是根本就没有找到那些图片,因此,哪怕我做任何操作的话
       我都应该是不能看到那些图片的吧
      

  4.   

    你把我问住了。我也曾经跟这类问题较量过很长时间,要用Java Web Start发布程序,打了jar包,结果,要么只能在IDE里运行,要么只能在jar里运行。后来我就只能用以上所述的笨办法了。我一直觉得把resource放在class目录里,很别扭。另外,Class.getResource()、ClassLoader.getSystemResource()这些方法的搜索过程是比较复杂,值得好好研究研究,虽然我也看了很多次,但现在还不是很明白。
      

  5.   

    再次感谢chongkai() 的回复:)
    谢谢虽然并没有完全解决我的问题,不过也学到了一些东西
    谢谢大家的回复
    揭帖啦!!!  ^-^