我正在成功运行一个C++应用程序,该应用程序使用JAR文件作为类路径参数加载JVM.然后,应用程序成功使用JNI调用来执行此JAR文件中.class文件中定义的各种函数.
.jar文件的目录结构中包含第三方.class文件集 - 从jai_imageio.jar合并的文件(这些.class文件及其完整目录结构,使用Intellij IDEA合并到此单个.jar文件中).合并的.jar文件中还包括来自原始jai_imageio.jar的行manifest.mf- 特别是implementation-title相关行.此外,该meta-inf/services文件夹存在,也从jai_imageio.jar复制.services目录中列出的各种服务看起来是正确的.
特别地,javax.imageio.spi.ImageOutputStreamSpi该内meta-inf/services在.jar文件夹中包含的单个线com.sun.media.imageioimpl.stream.ChannelImageOutputStreamSpi,并有在恰好由线indicatted的目录对应于该.jar文件内的类:com/sun/media/imageioimpl/stream/ChannelImageOutputStreamSpi.class.
但是,当Java代码执行以下行时:
ImageIO.write(image, "tiff", file); // Assume 'image' is a BufferedImage and 'file' is a File
Run Code Online (Sandbox Code Playgroud)
...它抛出异常:
java.util.ServiceConfigurationError: javax.imageio.spi.ImageOutputStreamSpi:
Provider com.sun.media.imageioimpl.stream.ChannelImageOutputStreamSpi not found
Run Code Online (Sandbox Code Playgroud)
......即使这个类是同一个.jar文件中存在,如上所述.
有人可以解释为什么会发生这种错误,以及我应该怎么做才能解决它.