[英]java exception in thread “AWT-EventQueue-0” java.lang.IllegalArgumentException
[英]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.read的Javadocs :
返回一個
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.