java icon显示图片_Java:读取图像并显示为ImageIcon

我正在编写一个应用程序,它以

ImageIcons(在JLabel中)读取和显示图像,应用程序需要能够支持jpeg和位图.

对于jpeg,我发现将文件名直接传递给ImageIcon构造函数工作正常(即使显示两个大型jpeg),但是如果我使用ImageIO.read获取图像然后将图像传递给ImageIcon构造函数,我会得到一个OutOfMemoryError( Java Heap Space)读取第二个图像时(使用与之前相同的图像).

对于位图,如果我尝试通过将文件名传递给ImageIcon来读取,则不显示任何内容,但是通过使用ImageIO.read读取图像然后在ImageIcon构造函数中使用此图像可以正常工作.

我从阅读其他论坛帖子中了解到,两种方法对于不同格式不起作用的原因归结为java与位图的兼容性问题,但是有一种方法可以绕过我的问题以便我可以使用相同的方法没有OutOfMemoryError的位图和jpegs?

(如果可能,我想避免增加堆大小!)

OutOfMemoryError由此行触发:

img = getFileContentsAsImage(file);

方法定义是:

public static BufferedImage getFileContentsAsImage(File file) throws FileNotFoundException {

BufferedImage img = null;

try {

ImageIO.setUseCache(false);

img = ImageIO.read(file);

img.flush();

} catch (IOException ex) {

//log error

}

return img;

}

堆栈跟踪是:

Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space

at java.awt.image.DataBufferByte.(DataBufferByte.java:58)

at java.awt.image.ComponentSampleModel.createDataBuffer(ComponentSampleModel.java:397)

at java.awt.image.Raster.createWritableRaster(Raster.java:938)

at javax.imageio.ImageTypeSpecifier.createBufferedImage(ImageTypeSpecifier.java:1056)

at javax.imageio.ImageReader.getDestination(ImageReader.java:2879)

at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:925)

at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:897)

at javax.imageio.ImageIO.read(ImageIO.java:1422)

at javax.imageio.ImageIO.read(ImageIO.java:1282)

at framework.FileUtils.getFileContentsAsImage(FileUtils.java:33)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值