如何从本地读取png图片创建BufferedImage对象??

飘飘白云
博客专家认证
2006-06-01 02:20:20
我写了一个函数读取本地的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呢?我要用它来进行缩放的。
...全文
1240 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
飘飘白云 2006-06-01
  • 打赏
  • 举报
回复
^_^~~ 终于找到办法了,读入流,绕过读文件这个坎~

修改之后:
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中都正常工作了~~
飘飘白云 2006-06-01
  • 打赏
  • 举报
回复
^_^~~ 终于找到办法了,读入流,绕过读文件这个坎~

修改之后:
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中都正常工作了~~
飘飘白云 2006-06-01
  • 打赏
  • 举报
回复
找到问题的原因了,但是还没有找到解决方法或是替代方法。
两种URL路径不同导致的问题:一种是file:/D:/test/res/images/house.png
一种是jar:file:/D:/pack/test.jar!/res/images/house.png

继续求高人指点~

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧