2011-05-12 63 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);