簡體   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