2023-01-19 391
我成功地运行了一个C ++应用程序,该应用程序将JVM加载为JAR文件作为classPath参数.然后,该应用程序成功使用JNI调用来执行此JAR文件中的.class文件中定义的各种函数.
.jar文件的目录结构中包含的
是第三方的.class文件 – 从jai_imageio.jar合并的文件(这些.class文件及其完整的目录结构已使用Intellijij合并到此.JAR文件中主意).合并.jar文件中还包括原始的jai_imageio.jar的manifest.mf – 特别是implementation-title和相关行中的行.另外,存在meta-inf/services文件夹,也从jai_imageio.jar复制. services目录中列出的各种服务看起来正确.
尤其是,.jar文件中的meta-inf/services文件夹中的javax.imageio.spi.ImageOutputStreamSpi包含单行com.sun.media.imageioimpl.stream.ChannelImageOutputStreamSpi,并且在该行恰好指示的目录: com/sun/media/imageioimpl/stream/ChannelImageOutputStreamSpi.class.
但是,当Java代码执行以下行时:
ImageIO.write(image, "tiff", file); // Assume 'image' is a BufferedImage and 'file' is a File
…它引发异常:
java.util.ServiceConfigurationError: javax.imageio.spi.ImageOutputStreamSpi:
Provider com.sun.media.imageioimpl.stream.ChannelImageOutputStreamSpi not found
…即使此类 在同一.jar文件中存在,如上所述.
有人可以解释为什么会发生此错误以及我应该做些什么来解决它.
来自此文档
http://docs.oracle.com/javase/javase/1.5.0/docs/guide/jni/spec/invocation.html
“当将线程连接到VM时,上下文类加载程序是引导加载程序.”
通过actactcurrentthread()连接到JVM的任何本机线程仅获取Bootstrap类加载程序,甚至没有系统类加载程序.除非您明确修复新线程的上下文类加载程序,否则ServicEloDoder引用的类将不可用.
这可以像:
一样完成
java.lang.Thread.currentThread().setContextClassLoader(
java.lang.ClassLoader.getSystemClassLoader()
);
以上所述是小编给大家介绍的服务加载程序未找到服务提供商类,即使类与Meta-Inf/Services同一JAR文件,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/25889.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态