Java &引用;发生了JNI错误";对于程序的一个实例,而不是另一个实例

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

我在一台计算机上用EclipseJavaMars编写了一个大型程序,运行良好。我将程序导出为一个可运行的Jar文件,运行它没有任何问题。即使当我将整个项目导出到另一台计算机时,该程序仍然有效

当我对项目做了一些小改动时,这个问题在另一台计算机上出现了。这些更改只是基于内容的更改,不应对程序的功能产生任何影响从eclipse运行该程序似乎没有问题。但是,当我想运行新创建的Jar文件时,我遇到以下错误:

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中打包所需库”。非常感谢你!这是如何回答这个问题的?