繁体   English   中英

线程“AWT-EventQueue-0”中的异常java.lang.IllegalArgumentException:im == null

[英]Exception in thread “AWT-EventQueue-0” java.lang.IllegalArgumentException: im == null

嗨,我正在进行一个项目,我需要更改BASE64图像的字符串(jpg)...所以,当我没有做任何更改时,ImageReader正常工作,我的图像显示正确..但是当我对我的BASE64字符串进行更改时,上面的异常来了..我搜索了很多并且知道当ByteStream不是jpeg,png,gif..etc以及如果我有的话,im == null一种新型的ByteStream ......我该怎么用? 或者我的BASE64字符串是什么,我需要将其转换为图像..所以我该怎么办?

这是我的代码片段:这是将BASE64字符串转换为图像

 public  static BufferedImage decodeToImage(String imageString) throws IOException {
    BufferedImage image = null;
    byte[] imageByte;
    try {
        BASE64Decoder decoder = new BASE64Decoder();
        imageByte = decoder.decodeBuffer(imageString);
        ByteArrayInputStream bis = new ByteArrayInputStream(imageByte);
        image = ImageIO.read(bis);
        bis.close();
    } 
    catch (Exception e) {
        e.printStackTrace();
    }

    ImageIO.write(image, "jpg", new File("d:/CopyOfTestImage.jpg"));

    return image;
   }

看一下ImageIO.readJavadocs

返回一个BufferedImage作为解码提供的InputStream的结果,其中ImageReader是从当前注册的ImageReader自动选择的。 InputStream包装在ImageInputStream 如果没有已注册的ImageReader声称能够读取生成的流,则返回null [强调我的]

read方法可以返回null ,但是你没有检查它。 其实方法可能返回null,这就是为什么ImageIO.write抛出当你传递null进去异常。

首先,您需要检查错误条件并适当地处理它们(包括null返回,但也包括抛出的任何异常,您当前捕获并忽略这些异常)。

现在,如果您从ImageIO.read返回null,则意味着您传入read方法的字节似乎不是任何已知格式的有效图像。 您需要更详细地查看对base64字符串所做的修改,并确保您正在执行的操作有效,并生成有效的图像。 或者,如果您正在获得其他异常,那么您需要适当地处理它。

(作为一般规则,不要丢弃/跳过错误,因为当出现问题时你不知道为什么!)

改变这一行:

ImageIO.write(image, "jpg", new File("d:/CopyOfTestImage.jpg"));

这样的事情

image = ImageIO.read(getClass().getResource("/resources/CopyOfTestImage.jpg"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM