我写了一个函数读取本地的png 图片,在eclipse中工作的好好的,但是一旦打包到jar中,双击运行却怎么也装载不了本地图片,抛出imageio异常,说找不到文件。函数如下    public static BufferedImage getBufferedImage(JFrame jfrm, String fileName)
    {
        BufferedImage bid = null;
        try {
            URLClassLoader urlLoader = (URLClassLoader) jfrm.getClass().getClassLoader();
            URL url = urlLoader.findResource(fileName);
            File imageFile = new File(url.toString().substring(8)); // 原始图片文件            bid = ImageIO.read(imageFile);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return bid;
    }在JFrame中的调用代码:
BufferedImage biHill = Tools.getBufferedImage(this,"res/images/house.png");不知道为什么在打包之后就无法装载?有没有别的办法装载图片转换成BufferedImage呢?我要用它来进行缩放的。

解决方案 »

  1.   

    找到问题的原因了,但是还没有找到解决方法或是替代方法。
    两种URL路径不同导致的问题:一种是file:/D:/test/res/images/house.png
    一种是jar:file:/D:/pack/test.jar!/res/images/house.png继续求高人指点~
      

  2.   

    ^_^~~ 终于找到办法了,读入流,绕过读文件这个坎~修改之后:
        public static BufferedImage getBufferedImage(JFrame jfrm, String fileName)
        {
            BufferedImage bid = null;
            try {
                URLClassLoader urlLoader = (URLClassLoader) jfrm.getClass().getClassLoader();
                bid = ImageIO.read(urlLoader.getResourceAsStream(fileName));
            } catch (Exception e) {
                e.printStackTrace();
            }
            return bid;
        }可以在eclipse中,以及打包的jar中都正常工作了~~
      

  3.   

    ^_^~~ 终于找到办法了,读入流,绕过读文件这个坎~修改之后:
        public static BufferedImage getBufferedImage(JFrame jfrm, String fileName)
        {
            BufferedImage bid = null;
            try {
                URLClassLoader urlLoader = (URLClassLoader) jfrm.getClass().getClassLoader();
                bid = ImageIO.read(urlLoader.getResourceAsStream(fileName));
            } catch (Exception e) {
                e.printStackTrace();
            }
            return bid;
        }可以在eclipse中,以及打包的jar中都正常工作了~~