2011-05-12 157 views
3

這用於工作,現在它不工作。我沒有更改圖像假設流的部分,所以我不知道爲什麼這不起作用。下面是我的代碼片段:ImageIO.createImageInputStream返回null,怎麼回事?

File f = new File(filepath); 
applicantImage=new ImageDetail(filepath); 

Iterator<ImageReader> readers = 
    ImageIO.getImageReadersBySuffix(applicantImage.getFile_extension()); 
ImageReader reader = readers.next(); 

ImageInputStream iis = ImageIO.createImageInputStream(f); 

filepath是絕對的文件路徑的圖像和圖像的確認是在服務器上的位置。一切工作都很好,直到達到ImageIO.createImageInputStream(f)。它現在正在返回null。我閱讀javadoc它需要一個文件。那爲什麼現在要返回null?有人知道嗎?上面所列出的代碼在我的編輯中都沒有改變,所以我不明白爲什麼它在改變之前有效,爲什麼它現在不起作用。任何幫助深表感謝!謝謝!

+1

您傳遞中的'File'實例可能會造成這種情況。看看'f.exists()'是否返回'true'來確認。 – 2011-05-12 01:45:49

回答

4

嘗試使用與File構建的InputStream

ImageIO.createImageInputStream(new FileInputStream(f)); 

這裏是一個相關的example

附錄:更接近ImageIO.createImageInputStream(),它確實說,允許File。事實上,您的原始代碼適用於我的平臺(Mac OS X),這讓我推測null的結果可能是您平臺ImageInputStreamSpi實現的特有結果。對於一個不存在的File f

ImageIO.createImageInputStream(f); 

我得到一個合理的例外:

 
Exception in thread "main" java.lang.IllegalStateException: Input not set! 
    at com.sun.imageio.plugins.gif.GIFImageReader.read(GIFImageReader.java:784) 
    at javax.imageio.ImageReader.read(ImageReader.java:923) 
    at cli.GifBounds.search(GifBounds.java:22) 
    at cli.GifBounds.main(GifBounds.java:14) 
+0

也考慮用'BufferedInputStream'封裝'FileInputStream'。 – trashgod 2011-05-12 02:17:09

+2

+1 - 如果'f'不存在或不能被讀取,那麼你應該得到一個例外說。 (沒有這個「返回null,不告訴應用程序爲什麼」廢話。) – 2011-05-12 03:28:15

+1

+1 FileInputStream工作!謝謝!! – Dana 2011-05-12 17:53:45

0

你需要設置輸入之前:

reader.setInput(iis); 
dimension = new Dimension(reader.getWidth(0), reader.getHeight(0)); 
System.out.print(dimension);