找不到Java安全类

启动程序时,会弹出下一个错误

java.lang.NoClassDefFoundError:无法初始化类javax.crypto.SunJCE_b

这意味着这个类缺失虽然我已经手动找到这个类,但是通过jar / ide工作,但是通过服务不能完美地工作。

也许我需要做一些修改? 但是哪个? 提前致谢

我不知道这是否与您的问题相关,但由于我使用的JCE策略文件的版本,我遇到了完全相同的行为。

使用适当的Unlimited Strength Cryptography Extenstions为我解决了这个问题。 我相信我可能不小心安装了Java 7的扩展而不是6.(我使用Java 6进行编译)

对于Windows机器,它们应该安装在已安装的JDK的jre / lib / security文件夹中,例如:c:\ program files \ Java \ jdk1.6.0_33 \ jre \ lib \ security

该类应位于jce.jar文件中。 这必须在类路径上。 如果使用java -jar myapp.jar启动程序,如果在没有 -jar选项的情况下启动应用程序xor在jar文件清单中的Class-Path条目,请仔细检查您的类路径参数应该是-cp参数


您找到了一个常见的WTF;) – 这是一个广为人知的规则: 如果您使用-jar选项启动app,则会忽略-cp选项和CLASSPATH环境。 然后必须在Manifest中指定类路径。

快速解决方法 – 假设您将“主类”命名为com.example.App ,然后启动应用程序,如下所示:

 java -cp jce.jar com.example.App 

我们的文件权限只设置为只读root,并给我们一个类似的错误。
更改权限和事情有效!

$ pwd
/ usr / lib目录/ JVM / JAVA / JRE / lib / security中
$ ls -l
总共128
-rw-R – R–。 1 root root 2177 Mar 1 2013黑名单
-rw-R – R–。 1 root root 84029 Sep 30 18:01 cacerts
-rw-R – R–。 1 root root 2253 2013年3月1日java.policy
-rw-R – R–。 1 root root 11804 2013年3月1日java.security
-rw-R – R–。 1 root root 109 Mar 1 2013 javaws.policy
-rw-R – R–。 1 root root 2481 Sep 16 16:50 local_policy.jar
-rw-R – R–。 1 root root 0 Mar 1 2013 trusted.libraries
-rw-R – R–。 1 root root 1924 Jul 18 17:42 truststore-epicinterbld.pem
-rw-R – R–。 1 root root 2465 Sep 16 16:50 US_export_policy.jar

检查启动时正在使用的jre,并确保jre / lib / ext文件夹包含sunjce_provider.jar

确保您没有使用extensions目录选项。 在过去,当我使用extensions目录选项而不是类路径时,它不再能够加载安全库和策略。 当我回到使用显式类路径时,安全function恢复工作。

我删除了/ Library / Java / VirtualMachine中的各种旧JDK(得到了osx),重新启动android studio后错误消失了,但我还是要重新设置jdk。 也许它有助于其他人。

这是JRE版本的问题,它应该指向与程序使用相同的jre版本,它查找“jre / lib / security”应该在程序的相同jdk下