当我使用Java 6时程序运行正常,但在切换到Java 7后发生错误。 已经使用相同的图像文件进行测试,因此可能不是图像格式的问题。
部分代码:( ImageIO.write行发生错误)
try {
ImageIO.write(bimage, format, bstream);
bstream.close();
return bstream.toByteArray();
} catch (IOException e) {
throw new RuntimeException(e);
}
错误:
java.util.ServiceConfigurationError: javax.imageio.spi.ImageReaderSpi: Provider com.slb.imageio.plugins.wsq.writer.WSQImageWriterSpi not a subtype
at java.util.ServiceLoader.fail(ServiceLoader.java:231)
at java.util.ServiceLoader.access$300(ServiceLoader.java:181)
at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:369)
at java.util.ServiceLoader$1.next(ServiceLoader.java:445)
at javax.imageio.spi.IIORegistry$1.run(IIORegistry.java:241)
at java.security.AccessController.doPrivileged(Native Method)
at javax.imageio.spi.IIORegistry.registerInstalledProviders(IIORegistry.java:249)
at javax.imageio.spi.IIORegistry.registerStandardSpis(IIORegistry.java:184)
at javax.imageio.spi.IIORegistry.<init>(IIORegistry.java:137)
at javax.imageio.spi.IIORegistry.getDefaultInstance(IIORegistry.java:159)
at javax.imageio.ImageIO.<clinit>(ImageIO.java:65)
不仅ImageIO.write(),而且其他ImageIO方法也不能正常工作 如:
JPEGImageWriter imageWriter = (JPEGImageWriter)ImageIO.getImageWritersBySuffix("jpeg").next();
ImageOutputStream ios = ImageIO.createImageOutputStream(out);
我尝试过搜索类似错误,但未找到解决方法。 谁能帮我这个?感谢
答案 0 :(得分:2)
异常是由您安装的ImageIO插件引起的。
问题是提供者类com.slb.imageio.plugins.wsq.writer.WSQImageWriterSpi
是在名为/META-INF/services/javax.imageio.spi.ImageReaderSpi
的资源中注册的(通常在JAR中)。这是不正确的。
应该在/META-INF/services/javax.imageio.spi.ImageWriterSpi
。
从堆栈跟踪中可以看出,异常发生在ImageIO
类初始化(<clinit>
)中。这是至关重要的,也是大多数/所有ImageIO
方法在发生这种情况后失败的原因。 Java 6实现可能对它很宽松,并且无论是(或简单地忽略它),都将提供程序注册为ImageWriterSpi
,而Java 7实现则更严格。错误始终存在,它现在才显现出来。
要解决此问题,请与供应商联系并要求修复,或更新JAR文件并将正确的文件放在/META-INF/services/
中。如果您不需要失败的插件,当然您只需从类路径中删除包含插件的JAR。