【问题标题】:ImageIO.createImageInputStream is returning null, how come?ImageIO.createImageInputStream 返回 null,怎么回事?
【发布时间】:2016-05-31 19:10:57
【问题描述】:

以前可以,现在不行了。我没有更改图像应该流式传输的部分,所以我不知道为什么这不起作用。这是我的代码的 sn-p:

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 呢?有人知道吗?上面发布的代码在我的编辑中都没有更改,所以我不明白为什么它在更改之前有效,为什么现在不起作用。任何帮助深表感谢!谢谢!

【问题讨论】:

  • 您传入的File 实例可能会导致此问题。看看f.exists() 是否返回true 只是为了确定。

标签: java javax.imageio


【解决方案1】:

尝试使用由File 构造的InputStream。

ImageIO.createImageInputStream(new FileInputStream(f));

这是一个相关的example。

附录:仔细观察ImageIO.createImageInputStream(),它确实说File 是允许的。事实上,您的原始代码在我的平台(Mac OS X)上工作,这让我推测null 结果可能是您平台的ImageInputStreamSpi 实现所特有的。对于一个不存在的File f,

ImageIO.createImageInputStream(f);

我得到一个合理的例外:

线程“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)

【讨论】:

  • 还可以考虑将FileInputStream 包装成BufferedInputStream。
  • +1 - 如果f 不存在或无法读取,那么您应该得到一个例外来说明。 (这些“返回 null 并且不告诉应用程序为什么”都不是废话。)
【解决方案2】:

之前需要设置输入:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-10
    • 2014-06-11
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多