【问题标题】:java.lang.NoClassDefFoundError: Could not initialize class sun.security.ec.SunEC (occured after recent JRE update)java.lang.NoClassDefFoundError:无法初始化类 sun.security.ec.SunEC(在最近的 JRE 更新后发生)
【发布时间】:2023-04-02 21:31:01
【问题描述】:

更新最新的 JRE (1.7.0_25) 后,我的应用程序不会像以前那样从 webstart 启动。我没有部署任何更新的 jar 文件或更改 Web 服务器上的 JNLP 文件,但我无法从 webstart 启动应用程序。它可以在 IDE 和本地 jar 执行中正常运行

我尝试在控制面板的高级选项卡中禁用所有证书检查等,但错误仍然存​​在,我不确定这是否与最新 JRE 中的新安全设置有关,或者是否有其他更改(可能在网络服务器上?)我不控制网络服务器我只有一个发布应用程序的页面,并且可以访问 jar 文件的驱动器位置,驱动器位置的权限等是正确的。我现在迷路了至于是什么问题!我尝试退出 jar 并验证签名

感谢人们提供的任何帮助!完整的错误如下:

            java.lang.NoClassDefFoundError: Could not initialize class sun.security.ec.SunEC
                at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
                at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
                at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
                at java.lang.reflect.Constructor.newInstance(Unknown Source)
                at java.lang.Class.newInstance(Unknown Source)
                at sun.security.jca.ProviderConfig$2.run(Unknown Source)
                at sun.security.jca.ProviderConfig$2.run(Unknown Source)
                at java.security.AccessController.doPrivileged(Native Method)
                at sun.security.jca.ProviderConfig.doLoadProvider(Unknown Source)
                at sun.security.jca.ProviderConfig.getProvider(Unknown Source)
                at sun.security.jca.ProviderList.getProvider(Unknown Source)
                at sun.security.jca.ProviderList.getService(Unknown Source)
                at sun.security.jca.GetInstance.getInstance(Unknown Source)
                at java.security.Security.getImpl(Unknown Source)
                at java.security.AlgorithmParameters.getInstance(Unknown Source)
                at sun.security.x509.AlgorithmId.decodeParams(Unknown Source)
                at sun.security.x509.AlgorithmId.<init>(Unknown Source)
                at sun.security.x509.AlgorithmId.parse(Unknown Source)
                at sun.security.x509.X509Key.parse(Unknown Source)
                at sun.security.x509.CertificateX509Key.<init>(Unknown Source)
                at sun.security.x509.X509CertInfo.parse(Unknown Source)
                at sun.security.x509.X509CertInfo.<init>(Unknown Source)
                at sun.security.x509.X509CertImpl.parse(Unknown Source)
                at sun.security.x509.X509CertImpl.<init>(Unknown Source)
                at sun.security.provider.X509Factory.engineGenerateCertificate(Unknown Source)
                at java.security.cert.CertificateFactory.generateCertificate(Unknown Source)
                at sun.security.provider.JavaKeyStore.engineLoad(Unknown Source)
                at sun.security.provider.JavaKeyStore$JKS.engineLoad(Unknown Source)
                at java.security.KeyStore.load(Unknown Source)
                at com.sun.deploy.security.RootCertStore$1.run(Unknown Source)
                at java.security.AccessController.doPrivileged(Native Method)
                at com.sun.deploy.security.RootCertStore.loadCertStore(Unknown Source)
                at com.sun.deploy.security.RootCertStore.load(Unknown Source)
                at com.sun.deploy.security.RootCertStore.load(Unknown Source)
                at com.sun.deploy.security.ImmutableCertStore.load(Unknown Source)
                at com.sun.deploy.security.LazyRootStore.loadJREStore(Unknown Source)
                at com.sun.deploy.security.LazyRootStore.getTrustAnchors(Unknown Source)
                at com.sun.deploy.security.TrustDecider.getValidationState(Unknown Source)
                at com.sun.deploy.security.TrustDecider.validateChain(Unknown Source)
                at com.sun.deploy.security.TrustDecider.isAllPermissionGranted(Unknown Source)
                at com.sun.javaws.security.AppPolicy.grantUnrestrictedAccess(Unknown Source)
                at com.sun.javaws.security.JNLPSignedResourcesHelper.checkSignedResourcesHelper(Unknown Source)
                at com.sun.javaws.security.JNLPSignedResourcesHelper.checkSignedResources(Unknown Source)
                at com.sun.javaws.Launcher.prepareResources(Unknown Source)
                at com.sun.javaws.Launcher.prepareAllResources(Unknown Source)
                at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
                at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
                at com.sun.javaws.Launcher.launch(Unknown Source)
                at com.sun.javaws.Main.launchApp(Unknown Source)
                at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
                at com.sun.javaws.Main.access$000(Unknown Source)
                at com.sun.javaws.Main$1.run(Unknown Source)
                at java.lang.Thread.run(Unknown Source)

【问题讨论】:

  • 尝试搜索bug DB,如果找不到类似的,请提交新报告。看看甲骨文对此事的看法。
  • 好的,我最终找到了问题所在。我们使用的另一个应用程序的更新与 JRE 更新同时发生;这个外部供应商的应用程序需要一些额外的权限,因此它覆盖了我的 java.policy 文件(当我检查目录时,原来的文件带有 .bak 扩展名),所以我只是重命名了要检查的策略文件,一切都恢复正常了。该文件缺少以下内容:grant codeBase "file:${{java.ext.dirs}}/*" { permission java.security.AllPermission; };

标签: java jnlp java-web-start


【解决方案1】:

即使在您对 jar 签名后,如 jar signing 所示,您也无法在浏览器中运行您的小程序。完成签名后,您应该使用 policytool.exe 在活动 jdk/jre 的 java.polcy 中添加 sun.security.ec.SunEC 类的访问权限。确保以管理员身份运行 policytool.exe,以便您可以修改 java.policy 文件。您必须为 grant codeBase "file:${{java.ext.dirs}}/*" { permission java.security.AllPermission; 添加一个条目};正如马特 C 所建议的那样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-10
    • 2013-08-08
    • 2020-09-27
    • 2012-08-26
    • 2015-10-29
    • 2017-09-12
    • 2016-07-07
    相关资源
    最近更新 更多