A JNI error has occurred,please check your installation andtry again

本文记录了一次因缺少环境变量导致的Java应用启动失败的问题,并详细介绍了正确的环境变量配置方法。

报错信息

"C:\Program Files\Java\jdk1.8.0_212\bin\java.exe" "-javaagent:D:\Software\IntelliJ IDEA 2018.3.5\lib\idea_rt.jar=2520:D:\Software\IntelliJ IDEA 2018.3.5\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_212\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_212\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_212\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_212\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_212\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_212\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_212\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_212\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_212\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_212\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_212\jre\lib\rt.jar;D:\北京国遥工作文件夹\广州局二期\02工程过程\03 软件实现\后台代码\GDWEBGL\target\classes;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.1.6.RELEASE\spring-boot-starter-web-2.1.6.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter\2.1.6.RELEASE\spring-boot-starter-2.1.6.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.1.6.RELEASE\spring-boot-starter-logging-2.1.6.RELEASE.jar;C:\Users\Administrator\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\Administrator\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\Administrator\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.11.2\log4j-to-slf4j-2.11.2.jar;C:\Users\Administrator\.m2\repository\org\apache\logging\log4j\log4j-api\2.11.2\log4j-api-2.11.2.jar;C:\Users\Administrator\.m2\repository\org\slf4j\jul-to-slf4j\1.7.26\jul-to-slf4j-1.7.26.jar;C:\Users\Administrator\.m2\repository\org\yaml\snakeyaml\1.23\snakeyaml-1.23.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.1.6.RELEASE\spring-boot-starter-json-2.1.6.RELEASE.jar;C:\Users\Administrator\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.9\jackson-datatype-jdk8-2.9.9.jar;C:\Users\Administrator\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.9\jackson-datatype-jsr310-2.9.9.jar;C:\Users\Administrator\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.9\jackson-module-parameter-names-2.9.9.jar;C:\Users\Administrator\.m2\repository\org\hibernate\validator\hibernate-validator\6.0.17.Final\hibernate-validator-6.0.17.Final.jar;C:\Users\Administrator\.m2\repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;C:\Users\Administrator\.m2\repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;C:\Users\Administrator\.m2\repository\com\fasterxml\classmate\1.4.0\classmate-1.4.0.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-web\5.1.8.RELEASE\spring-web-5.1.8.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-beans\5.1.8.RELEASE\spring-beans-5.1.8.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-webmvc\5.1.8.RELEASE\spring-webmvc-5.1.8.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-aop\5.1.8.RELEASE\spring-aop-5.1.8.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-expression\5.1.8.RELEASE\spring-expression-5.1.8.RELEASE.jar;C:\Users\Administrator\.m2\repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;C:\Users\Administrator\.m2\repository\org\mybatis\spring\boot\mybatis-spring-boot-starter\1.3.1\mybatis-spring-boot-starter-1.3.1.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\2.1.6.RELEASE\spring-boot-starter-jdbc-2.1.6.RELEASE.jar;C:\Users\Administrator\.m2\repository\com\zaxxer\HikariCP\3.2.0\HikariCP-3.2.0.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-jdbc\5.1.8.RELEASE\spring-jdbc-5.1.8.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-tx\5.1.8.RELEASE\spring-tx-5.1.8.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\mybatis\spring\boot\mybatis-spring-boot-autoconfigure\1.3.1\mybatis-spring-boot-autoconfigure-1.3.1.jar;C:\Users\Administrator\.m2\repository\org\mybatis\mybatis\3.4.5\mybatis-3.4.5.jar;C:\Users\Administrator\.m2\repository\org\mybatis\mybatis-spring\1.3.1\mybatis-spring-1.3.1.jar;D:\北京国遥工作文件夹\广州局二期\02工程过程\03 软件实现\后台代码\GDWEBGL\lib\ojdbc6.jar;D:\北京国遥工作文件夹\广州局二期\02工程过程\03 软件实现\后台代码\GDWEBGL\lib\ProjectionEngine.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-devtools\2.1.6.RELEASE\spring-boot-devtools-2.1.6.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.1.6.RELEASE\spring-boot-autoconfigure-2.1.6.RELEASE.jar;C:\Users\Administrator\.m2\repository\net\sourceforge\jexcelapi\jxl\2.6.10\jxl-2.6.10.jar;C:\Users\Administrator\.m2\repository\log4j\log4j\1.2.14\log4j-1.2.14.jar;C:\Users\Administrator\.m2\repository\io\jsonwebtoken\jjwt\0.7.0\jjwt-0.7.0.jar;C:\Users\Administrator\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.9.9\jackson-databind-2.9.9.jar;C:\Users\Administrator\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;C:\Users\Administrator\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.9.9\jackson-core-2.9.9.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-core\5.1.8.RELEASE\spring-core-5.1.8.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-jcl\5.1.8.RELEASE\spring-jcl-5.1.8.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot\2.1.6.RELEASE\spring-boot-2.1.6.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-context\5.1.8.RELEASE\spring-context-5.1.8.RELEASE.jar;C:\Users\Administrator\.m2\repository\com\alibaba\fastjson\1.2.33\fastjson-1.2.33.jar;C:\Users\Administrator\.m2\repository\commons-fileupload\commons-fileupload\1.3\commons-fileupload-1.3.jar;C:\Users\Administrator\.m2\repository\commons-io\commons-io\2.2\commons-io-2.2.jar;C:\Users\Administrator\.m2\repository\com\jcraft\jsch\0.1.54\jsch-0.1.54.jar;C:\Users\Administrator\.m2\repository\com\github\pagehelper\pagehelper-spring-boot-starter\1.2.10\pagehelper-spring-boot-starter-1.2.10.jar;C:\Users\Administrator\.m2\repository\com\github\pagehelper\pagehelper-spring-boot-autoconfigure\1.2.10\pagehelper-spring-boot-autoconfigure-1.2.10.jar;C:\Users\Administrator\.m2\repository\com\github\pagehelper\pagehelper\5.1.8\pagehelper-5.1.8.jar;C:\Users\Administrator\.m2\repository\com\github\jsqlparser\jsqlparser\1.2\jsqlparser-1.2.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-cache\2.1.6.RELEASE\spring-boot-starter-cache-2.1.6.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-context-support\5.1.8.RELEASE\spring-context-support-5.1.8.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\apache\cxf\cxf-rt-frontend-jaxws\3.1.12\cxf-rt-frontend-jaxws-3.1.12.jar;C:\Users\Administrator\.m2\repository\xml-resolver\xml-resolver\1.2\xml-resolver-1.2.jar;C:\Users\Administrator\.m2\repository\org\ow2\asm\asm\5.0.4\asm-5.0.4.jar;C:\Users\Administrator\.m2\repository\org\apache\cxf\cxf-core\3.1.12\cxf-core-3.1.12.jar;C:\Users\Administrator\.m2\repository\org\codehaus\woodstox\woodstox-core-asl\4.4.1\woodstox-core-asl-4.4.1.jar;C:\Users\Administrator\.m2\repository\org\codehaus\woodstox\stax2-api\3.1.4\stax2-api-3.1.4.jar;C:\Users\Administrator\.m2\repository\org\apache\ws\xmlschema\xmlschema-core\2.2.2\xmlschema-core-2.2.2.jar;C:\Users\Administrator\.m2\repository\org\apache\cxf\cxf-rt-bindings-soap\3.1.12\cxf-rt-bindings-soap-3.1.12.jar;C:\Users\Administrator\.m2\repository\org\apache\cxf\cxf-rt-wsdl\3.1.12\cxf-rt-wsdl-3.1.12.jar;C:\Users\Administrator\.m2\repository\wsdl4j\wsdl4j\1.6.3\wsdl4j-1.6.3.jar;C:\Users\Administrator\.m2\repository\org\apache\cxf\cxf-rt-databinding-jaxb\3.1.12\cxf-rt-databinding-jaxb-3.1.12.jar;C:\Users\Administrator\.m2\repository\com\sun\xml\bind\jaxb-impl\2.2.11\jaxb-impl-2.2.11.jar;C:\Users\Administrator\.m2\repository\com\sun\xml\bind\jaxb-core\2.2.11\jaxb-core-2.2.11.jar;C:\Users\Administrator\.m2\repository\org\apache\cxf\cxf-rt-bindings-xml\3.1.12\cxf-rt-bindings-xml-3.1.12.jar;C:\Users\Administrator\.m2\repository\org\apache\cxf\cxf-rt-frontend-simple\3.1.12\cxf-rt-frontend-simple-3.1.12.jar;C:\Users\Administrator\.m2\repository\org\apache\cxf\cxf-rt-ws-addr\3.1.12\cxf-rt-ws-addr-3.1.12.jar;C:\Users\Administrator\.m2\repository\org\apache\cxf\cxf-rt-ws-policy\3.1.12\cxf-rt-ws-policy-3.1.12.jar;C:\Users\Administrator\.m2\repository\org\apache\neethi\neethi\3.0.3\neethi-3.0.3.jar;C:\Users\Administrator\.m2\repository\org\apache\cxf\cxf-rt-transports-http\3.2.2\cxf-rt-transports-http-3.2.2.jar;C:\Users\Administrator\.m2\repository\com\alibaba\druid-spring-boot-starter\1.1.9\druid-spring-boot-starter-1.1.9.jar;C:\Users\Administrator\.m2\repository\com\alibaba\druid\1.1.9\druid-1.1.9.jar;C:\Users\Administrator\.m2\repository\org\slf4j\slf4j-api\1.7.26\slf4j-api-1.7.26.jar" com.ev_image.gdwebgl.GdwebglApplication
java.lang.NoClassDefFoundError: javax/servlet/MultipartConfigElement
	at java.lang.Class.getDeclaredMethods0(Native Method)
	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
	at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
	at java.lang.Class.getMethod0(Class.java:3018)
	at java.lang.Class.getMethod(Class.java:1784)
	at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
	at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: javax.servlet.MultipartConfigElement
	at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 7 more
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" 
Process finished with exit code 1

解决方法

我这边是因为安装了jdk后没有装环境变量
你可以验证下: java -version 查看java版本
javac -version 看看能不能跑起来

配置环境变量

变量名:JAVA_HOME
变量值:G:\code\path\java\   // 要根据自己的实际路径配置

变量名:CLASSPATH
变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;  //记得前面有个"."

变量名:Path

变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
### JNI 错误解决方案:检查安装并重新尝试 当遇到 JNI (Java Native Interface) 的错误时,通常需要仔细分析问题的根本原因。以下是针对此问题的一些常见解决方法: #### 1. **确认绑定方式** 如果使用的是自定义绑定的方式注册本地函数,则可以利用 `RegisterNatives` 方法手动绑定 Java 方法与对应的 JNI 函数[^1]。这种方式允许开发者自由命名 JNI 函数而不需要严格遵循默认的命名约定。 ```java static { System.loadLibrary("your_native_library"); } public class YourClass { static { JNINativeMethod[] methods = new JNINativeMethod[]{ new JNINativeMethod("nativeMethodName", "()V", (void*) yourNativeFunctionPointer) }; RegisterNatives(classRef, methods, 1); } } ``` 通过这种方法,能够有效减少因名称不匹配引起的 JNI 调用失败。 --- #### 2. **处理旧版本 Android 中的问题** 某些旧版 Android 存在 `PackageManager` 的 bug,这可能导致原生库加载不可靠。为了规避这些问题,建议引入第三方工具如 ReLinker 来提供更稳定的加载机制[^2]。 ReLinker 是一种用于可靠加载共享库的开源项目,它解决了许多常见的加载问题,包括但不限于: - 原生库路径冲突。 - 不同架构设备上的兼容性问题。 可以通过 Maven 或 Gradle 集成 ReLinker 到项目中,并替换传统的 `System.loadLibrary()` 使用模式。 ```gradle dependencies { implementation 'com.getkeepsafe.relinker:relinker:1.4.5' } ``` 随后,在应用初始化阶段调用如下代码来安全加载库文件: ```java import com.getkeepsafe.relinker.ReLinker; try { ReLinker.loadLibrary(context, "your_native_lib").load(); } catch (UnsatisfiedLinkError e) { Log.e("JNI_ERROR", "Failed to load native library.", e); } ``` 这种做法显著提高了跨平台支持能力以及运行稳定性。 --- #### 3. **验证安装过程中的依赖项** 确保目标设备已正确下载所需的所有动态链接库 (.so 文件),并且这些文件位于预期目录下(通常是 `/data/app/.../lib/armeabi-v7a/`)。如果发现缺失特定 ABI 支持的情况,应调整构建配置以包含更多体系结构的支持。 修改模块下的 `build.gradle` 文件,增加以下内容以便覆盖所有可能的目标硬件环境: ```groovy android { defaultConfig { ndk { abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' } } } ``` 此外还需注意 APK 打包过程中是否存在压缩损坏的风险;推荐采用 ProGuard 或 R8 工具优化资源的同时保留必要的符号表信息以防混淆引发异常行为。 --- #### 4. **调试技巧** 对于难以定位的具体 JNI 报错情况,可启用详细的日志记录功能辅助诊断。例如设置 JVM 参数 `-Xlog:jni=debug` 获取额外输出数据帮助理解交互细节。 同时也可以借助 gdb/lldb 等外部调试器深入探查崩溃现场上下文变量状态变化轨迹从而快速锁定故障源头位置所在区域范围之内进一步缩小排查边界直至最终解决问题为止。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李卓书

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值