这是一个难题!
我在JAR中有一个小程序。当JAR签名时 - 无论是自签名还是使用DigiCert sertificate - 我在主applet类上得到ClassNotFoundException
。
当我不对applet签名时,它会加载正常 - (由于代码未签名而不计算预期的SecurityException
。)
但是我可以解压缩签名的JAR并找到它应该在的位置。
最奇怪的是,直到上周,设置工作得很好。 相同的主类,自签名,JS / HTML等的相同部署组合。
有什么想法吗?
以下是错误消息:
java.lang.ClassNotFoundException: com.spraklab.ilos.applet.Applet
at sun.plugin2.applet.Applet2ClassLoader.findClass(Applet2ClassLoader.java:195)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Plugin2ClassLoader.java:249)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Plugin2ClassLoader.java:179)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Plugin2ClassLoader.java:160)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Plugin2ClassLoader.java:690)
at sun.plugin2.applet.Plugin2Manager.createApplet(Plugin2Manager.java:3045)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Plugin2Manager.java:1497)
at java.lang.Thread.run(Thread.java:680)
答案 0 :(得分:2)
在上面的代码中,您尝试切换安全applet类加载器。自Java 1.2以来,这是不允许的。
答案 1 :(得分:0)
简短版本: JAR名称中没有连字符!
戏剧性的故事: 最后!发现问题后的许多工作日。 未签名时applet加载正常,签名时发布ClassNotFoundException。 关于转换类加载器的答案让我相信我的代码中有一些变化。所以我把我的代码剥离到最低限度。 但为了避免不得不一直重新启动浏览器并清空缓存等,我只是使用Chrome的隐身模式。我重建了代码。一切都很好。不! 当我在隐姓埋名之外测试它时,我再次收到错误。
那有什么区别?对服务器日志的检查表明,在正常模式下,Jar根本没有被要求从服务器请求! 我将我的代码再次与具有类似嵌入代码的不同应用程序进行了比较,并且只看到了一个区别:我使用的是连字符而不是JAR名称中的下划线 - 这应该是允许的,并且已经工作正常大约2周前。 但是大约2周前还没有Java更新......?!?!