Java ImageIO.createImageInputStream返回null,为什么?

Java ImageIO.createImageInputStream返回null,为什么?,java,javax.imageio,Java,Javax.imageio,这过去是有效的,现在不起作用了。我没有改变图像应该流的部分,所以我不知道为什么这不起作用。以下是我的代码片段: File f = new File(filepath); applicantImage=new ImageDetail(filepath); Iterator<ImageReader> readers = ImageIO.getImageReadersBySuffix(applicantImage.getFile_extension()); ImageReade

这过去是有效的,现在不起作用了。我没有改变图像应该流的部分,所以我不知道为什么这不起作用。以下是我的代码片段:

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);
File f=新文件(filepath);
applicationImage=新图像详细信息(文件路径);
迭代器读取器=
ImageIO.getImageReadersBySuffix(applicationImage.getFile_扩展名());
ImageReader=readers.next();
ImageInputStream iis=ImageIO.createImageInputStream(f);

filepath
是映像的绝对文件路径,并且映像已确认位于服务器上的该位置。在到达
ImageIO.createImageInputStream(f)
之前,一切都很好。它现在正在返回
null
。我读了javadoc,它接收一个文件。那么为什么它现在返回一个
null
?有人知道吗?上面发布的代码在我的编辑过程中都没有更改,所以我不明白为什么在更改之前它能工作,为什么现在不能工作。非常感谢您的帮助!谢谢

尝试使用由
文件构建的
InputStream

ImageIO.createImageInputStream(new FileInputStream(f));
这是一个相关的例子

附录:仔细看,它确实说允许使用
文件。事实上,您的原始代码在我的平台(Mac OS X)上工作,这让我推测
null
结果可能是您的平台实现所特有的。对于不存在的
文件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) 线程“main”java.lang.IllegalStateException中出现异常:未设置输入! 在com.sun.imageio.plugins.gif.GIFImageReader.read(GIFImageReader.java:784)上 位于javax.imageio.ImageReader.read(ImageReader.java:923) 在cli.GifBounds.search中(GifBounds.java:22) 位于cli.GifBounds.main(GifBounds.java:14)
您需要在以下操作之前设置输入:

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

您正在传递的
文件
实例可能导致此问题。请参阅<代码> .Frime](代码)>返回<代码> Trase<代码>以确保。还考虑包装<代码> FielnPixStuts<代码> > < BuffReDeDePixStase + 1。如果<代码> f <代码>不存在或无法读取,则应该得到一个例外来表示。(这些“返回null,不告诉应用程序为什么”都不是废话。)