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

时间:2013-06-28 10:02:41

标签: java

嗨,我正在开发一个项目,我需要更改BASE64图像的字符串(jpg)...所以,当我没有做任何更改时,ImageReader正常工作,我的图像显示正确..但是当我对我的BASE64字符串进行更改时,上面的异常来了..我搜索了很多,并且知道当ByteStream不是jpeg,png,gif..etc..so时,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;
   }

2 个答案:

答案 0 :(得分:2)

查看Javadocs for ImageIO.read

  

返回BufferedImage作为解码提供的InputStream的结果,其中ImageReader自动从当前注册的那些中选择InputStreamImageInputStream包含在ImageReader中。 如果没有已注册的null声称能够阅读结果流,则会返回null 。 [强调我的]

read方法可以返回ImageIO.write,但您没有检查这个。实际上,方法 可能返回null,这就是为什么{{1}}在将null传递给它时抛出异常的原因。

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

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

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

答案 1 :(得分:1)

更改此行:

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

这样的事情

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