我有一个在 Tomcat 6 中的 Java 6 上运行的 Web 应用程序。ImageIO.read
返回 null。
它试图从同一 [Windows] 网络上的计算机检索 tiff 图像。 为此,我使用 JCIFS 作为身份验证,并使用 jai 来读取图像。
在 QA 中,这有效,我检索并显示了 TIF。 在生产中,它不会。
我能够访问图像并正确检索文件路径。
这是日志中的错误:
2013-11-18 11:06:47,405 [webapp] INFO [http-8080-6]
ScannedService.getScannedDocuments(66) | Customer.java
get files at Paths[smb://sharedDrived/path/1HK01001.TIF]
2013-11-18 11:06:47,421 [webapp] INFO [http-8080-6]
ScannedDocument.<init>(32) | ScannedDocument.java
constructor, image value: null
null 是返回值:
ImageIO.read(smbStream);
为什么该行返回 null?
最佳答案
ImageIO.read
返回 null
的原因是没有 ImageReader
插件声称能够读取它(否则,除非输入是null
,尝试使用第一个声称它可以读取输入的插件进行读取,并且您要么获得图像,要么抛出异常)。
这可能是由两件事造成的。要么没有安装插件(由 ImageIO 发现)。或者输入已损坏,无法识别。您似乎已经做了足够的调试/测试来确定后者不是这里的问题。所以我仍然认为问题出在 jai-imageio 的安装上,或者可能是 ImageIO 没有发现 JAI 插件。
您可以尝试(在您的应用程序启动时,或者每次您得到一个 null
图像时)打印 ImageIO 支持的所有格式(使用 ImageIO.getReaderFormatNames()
) 到调试日志,并查看是否列出了 TIFF。
请注意,如果您提供 jai-imageio JAR 作为 Web 应用程序的一部分(在 WEB-INF/lib 中),则在重新部署后不会自动发现插件,除非您执行 ImageIO.scanForPlugins( )
。在那种情况下,我建议你阅读 Deploying the plugins in a web app .
关于java - 无法使用 JCIFS 和 jai imageio 从联网的 Windows PC 读取 tiff 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20051032/