0

我编写了一个工具(使用spring boot)从HP QC v10获取详细信息。我为此使用com4j API。程序在eclipse中运行良好,但是当我通过jar运行代码(我使用maven install 创建)时会抛出以下异常。

我已经为OTAClient.dll生成了包装器,并制作了包装器qcconn.jar的jar文件。我还注册了 dll 文件:OTAClient.dll、WebClient.dllcom4j-amd64.dll。我正在使用jdk 8(32 位)。

我检查了由maven install生成的工具的jar文件,其中包含两个jarcom4j.jarqcconn.jar

运行 jar 文件时引发异常:java -jar mytool.jar

        at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:184) ~[spring-beans-5.1.6.RELEASE.jar!/:5.1.6.RELEASE]
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87) ~[spring-beans-5.1.6.RELEASE.jar!/:5.1.6.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1295) ~[spring-beans-5.1.6.RELEASE.jar!/:5.1.6.RELEASE]
        ... 38 common frames omitted
Caused by: java.lang.ExceptionInInitializerError: null
        at com.qc.ClassFactory.createTDConnection(ClassFactory.java:16) ~[qcconn-1.0.jar!/:na]
        at com.qc.report.gen.app.qc.connection.QCTool.<init>(QCTool.java:23) ~[classes!/:0.0.1-SNAPSHOT]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_201]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) ~[na:1.8.0_201]
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) ~[na:1.8.0_201]
        at java.lang.reflect.Constructor.newInstance(Unknown Source) ~[na:1.8.0_201]
        at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:172) ~[spring-beans-5.1.6.RELEASE.jar!/:5.1.6.RELEASE]
        ... 40 common frames omitted
Caused by: java.lang.NullPointerException: null
        at com4j.COM4J.loadNativeLibrary(COM4J.java:567) ~[com4j-1.0.jar!/:na]
        at com4j.COM4J.<clinit>(COM4J.java:522) ~[com4j-1.0.jar!/:na]
        ... 47 common frames omitted

Exception in thread "Com4J shutdown hook" java.lang.NoClassDefFoundError: Could not initialize class com4j.COM4J
        at com4j.COM4J$3.run(COM4J.java:476)````
4

1 回答 1

1

当我使用 32 位 JVM 时,每次我都想注册 com4j-x86.dll。注册后。它开始起作用了。另外请确保在运行 jar 时,以下 dll 文件应该存在于 jar 所在的同一文件夹下:com4j-x86.dll、OTAClient.dll 和 WebClient.dll

于 2019-04-16T06:49:47.540 回答