Java &引用;发生了JNI错误";对于程序的一个实例,而不是另一个实例
我在一台计算机上用EclipseJavaMars编写了一个大型程序,运行良好。我将程序导出为一个可运行的Jar文件,运行它没有任何问题。即使当我将整个项目导出到另一台计算机时,该程序仍然有效 当我对项目做了一些小改动时,这个问题在另一台计算机上出现了。这些更改只是基于内容的更改,不应对程序的功能产生任何影响从eclipse运行该程序似乎没有问题。但是,当我想运行新创建的Jar文件时,我遇到以下错误:Java &引用;发生了JNI错误";对于程序的一个实例,而不是另一个实例,java,eclipse,compiler-errors,java-8,java-native-interface,Java,Eclipse,Compiler Errors,Java 8,Java Native Interface,我在一台计算机上用EclipseJavaMars编写了一个大型程序,运行良好。我将程序导出为一个可运行的Jar文件,运行它没有任何问题。即使当我将整个项目导出到另一台计算机时,该程序仍然有效 当我对项目做了一些小改动时,这个问题在另一台计算机上出现了。这些更改只是基于内容的更改,不应对程序的功能产生任何影响从eclipse运行该程序似乎没有问题。但是,当我想运行新创建的Jar文件时,我遇到以下错误: Error: A JNI error has occurred, please check yo
Error: A JNI error has occurred, please check your installation and try again.
然后是一个框架,说:
A Java Exception has occurred.
所以我的问题是:
同一程序的不同实例如何可能无法通过Jar文件运行,而旧实例可以运行?
我在两台计算机上使用了相同的JDK版本(1.8.073),并以几乎相同的方式安装了它们:我首先通过一个组合版本将Java与NetBeans一起安装。接下来,我安装了Eclipse。唯一的区别是,在我离线安装eclipse的新计算机上,即没有eclipse安装程序,JNI意味着Java本机接口,这意味着应用程序正在尝试加载本机库。这些本机库不是已编译jar文件的一部分。尝试找出应用程序需要什么本机库,以及它是否安装在一台机器上,而不是另一台机器上。还要检查您的跑步配置。使用JNI,您需要设置-Djava.libary.path=参数以指向本机库。Eclipse提供了为项目导出JAR的不同方法。要在运行导出的JAR时使本机库可用,请选择“在生成的JAR中打包所需库”选项。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.datacollector.app.DataCollectorServiceRunner</mainClass>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
org.apache.maven.plugins
maven阴影插件
1.4
包裹
阴凉处
com.datacollector.app.DataCollectorServiceRunner
META-INF/spring.handlers
META-INF/spring.schemas
请将您的JDK更新为最新版本(JDK 11或12),以解决此问题。您好,感谢您的快速回复。这也解释了为什么旧的jar文件可以工作吗?这些库中是否包含本机库?后续问题:如何找到我正在使用的本机库?我检查了所有的JDK和JRE,并确保它们有完全相同的路径,但这似乎没有帮助。也许“导出”在旧版本上配置得更好computer@AlexCohn哇!我起初认为你的评论有点含糊,但这确实是问题所在。我选错了选项。我在新计算机上选择了“将所需库提取到生成的JAR中”,而不是“在生成的JAR中打包所需库”。非常感谢你!这是如何回答这个问题的?