我在Tomcat 6中运行Java 6上的webapp。ImageIO.read
返回null。
它尝试从同一[Windows]网络上的计算机中检索tiff图像。 为此,我使用JCIFS作为auth,并使用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?
答案 0 :(得分:1)
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。