Chr*_*eng 5 java applet noclassdeffounderror classloader
我得到了ff.偶尔出现在Java控制台中的错误:
Exception in thread "thread applet-my.package.MyApplet-10" java.lang.NoClassDefFoundError: another/package/SomeClass
at my.package.MyApplet.init(MyApplet.java:95)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: another.package.SomeClass
at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
... 3 more
Caused by: java.io.IOException: open HTTP connection failed:https://myserver/mycontext/applets/another/package/SomeClass.class
at sun.plugin2.applet.Applet2ClassLoader.getBytes(Unknown Source)
at sun.plugin2.applet.Applet2ClassLoader.access$000(Unknown Source)
at sun.plugin2.applet.Applet2ClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
... 7 more
Run Code Online (Sandbox Code Playgroud)
我的applet标签如下:
<applet codebase="../../applets" code="my.package.MyApplet" class="invisible" id="myApplet">
<param value="value0" name="param0"/>
...
<param value="valueN" name="paramN" />
<param value="folder/myApplet__0.0.1177.jar,folder/commons-io-1.3.2__0.0.1177.jar,..." name="cache_archive"/>
<param value="0.0.1177.0,0.0.1177.0,...," name="cache_version"/>
</applet>
Run Code Online (Sandbox Code Playgroud)
重要的是我强调"偶尔"这个词.有时applet会毫不费力地初始化.这也意味着,当浏览器重新启动时,问题就会消失.
我知道applet无法从jar加载类,而Applet类加载器在applet的jar中找不到类,但我认为它们不适用于我的情况.SomeClass和MyApplet位于同一个jar中,页面在本地访问.
Caused by: java.io.IOException: open HTTP connection failed:https://myserver/mycontext/applets/another/package/SomeClass.class
Run Code Online (Sandbox Code Playgroud)
从 HTTPS 服务器检索 jar 文件时似乎存在连接问题。
我不知道您运行的是哪个版本的 Java,但您可以在此处检查与您的问题相关的缺陷原因。
如果这不是问题,请确保下载 JAR 文件时有足够的缓存,否则它将无法启动。不幸的是,这不是代码问题。
更新您的班级是否SomeClass有机会访问任何远程服务器或数据库?
该异常清楚地表明存在AccessControl已被拒绝的特权。
at sun.plugin2.applet.Applet2ClassLoader.getBytes(Unknown Source)
at sun.plugin2.applet.Applet2ClassLoader.access$000(Unknown Source)
at sun.plugin2.applet.Applet2ClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
Run Code Online (Sandbox Code Playgroud)
请记住,小程序就像 Flash 对象:
唯一的区别是,Applet 设计了很多访问控制规则,例如,它不能连接到隐藏在公司 DMZ(非军事区)后面的服务器等。
如果是这种情况,我建议您找到一种在小程序之外检索数据的方法(尝试 servlet?)
更新 2 JVM 似乎找不到与您的签名 jar 匹配的受信任证书。