2014-02-26 71 views
0

需要幫助。我正在做一個將圖片合併爲一個的程序。我正在使用Windows的樣本圖片進行測試,並且工作正常。我的問題是,我有一個導致NullPointerException的圖像。這是我的代碼。ImageIO.read結果null

int imageHeight = 0; 
List<Integer> widthList = new ArrayList<Integer>(); 
List<Integer> chunkHeight = new ArrayList<Integer>(); 

File[] imgFiles = new File[chunks]; 
for (int x = 0; x < chunks; x++) { 
    imgFiles[x] = new File(tempDirectory + newFileName + (x + 1) + ".png"); 
} 

BufferedImage[] buffImages = new BufferedImage[chunks]; 
for (int i = 0; i < chunks; i++) { 
    buffImages[i] = ImageIO.read(imgFiles[i]); 
    chunkHeight.add(buffImages[i].getHeight()); 
    imageHeight = imageHeight + buffImages[i].getHeight(); 
    widthList.add(buffImages[i].getWidth()); 
} 

我在BufferedImage的getHeight()中遇到了NullPointer問題。我唯一的發現是當我在Photoshop中打開圖像時,出現錯誤「無法完成請求,因爲文件格式模塊無法解析文件」。謝謝。

編輯: 這裏是我的鏈接圖像我用:http://www.mediafire.com/download/5bx322a08c29uae/image2.png

+3

圖像不能被photsohop解析。你確定它是一個圖像文件嗎? – ItachiUchiha

+0

是的,我想。我可以打開並查看圖像,也可以在Paint中進行編輯。 – eclee01

+0

圖像出現問題,將其替換爲一組新圖像並重試 – ItachiUchiha

回答

1

我得到了錯誤「無法完成您的請求,因爲 文件格式的模塊無法解析該文件。」

正如你所說它可能是一個損壞的文件。只是爲了檢查我做了一些測試,如將.txt文件更改爲.png,然後運行此代碼。

BufferedImage b = null; 
try { 
    b = ImageIO.read(new File("C:\\Users\\uysers\\Desktop\\so.png")); 
    System.out.println(b.getHeight()); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

下面的線沒有問題,

b = ImageIO.read(new File("C:\\Users\\uysers\\Desktop\\so.png")); 

,而這條線

System.out.println(b.getHeight());我得到一個空指針異常。所以我會說你有一個損壞的圖像文件,使緩衝區圖像爲空。

+0

我不能說這是一個損壞的文件,因爲我可以打開和查看圖像,但不是在Photoshop中。謝謝! – eclee01

+1

我可以讀取文件並打印其寬度。 – Vinay

+0

請嘗試此文件。謝謝。 http://www.mediafire.com/download/5bx322a08c29uae/image2.png – eclee01

1

ImageIO.read返回null如果它不識別文件格式。這是記錄的行爲,所以您應該始終測試nullImageIO.read返回的值。

這就是爲什麼當詢問高度/寬度時你得到NullpointerException

由於Photoshop無法讀取它,它最有可能不是PNG文件,或該文件已損壞。

您可以輕鬆地通過使用修復您的代碼:

List<BufferedImage> buffImages = new ArraysList<>(chunks); 
for (int i = 0; i < chunks; i++) { 
    BufferedImage image = ImageIO.read(imgFiles[i]); 

    if (image != null) { 
     buffImages.add(image); 
     chunkHeight.add(image.getHeight()); 
     imageHeight = imageHeight + image.getHeight(); 
     widthList.add(image.getWidth()); 
    } 
} 

PS:我的Windows樣本圖片文件夾中只包含JPEG圖片,也許你可以張貼鏈接到破碎的形象?

+0

我已經在第一篇文章中發佈圖片鏈接。謝謝! – eclee01

+0

@ eclee01:鏈接似乎打破了我... – haraldK

+0

我上傳到mediafire。你可以檢查嗎?謝謝 – eclee01