5

我明白了。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

我的小程序标签如下:

<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>

重要的是我强调“偶尔”这个词。有时小程序的初始化很顺利。这也意味着,通常,当重新启动浏览器时,问题就会消失。

我知道小程序无法从 jar 加载类,并且Applet 类加载器在小程序的 jar 中找不到类,但我认为它们不适用于我的情况。SomeClass 和 MyApplet 在同一个 jar 中,并且该页面正在本地访问。

4

2 回答 2

1
Caused by: java.io.IOException: open HTTP connection failed:https://myserver/mycontext/applets/another/package/SomeClass.class

从 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)

请记住,小程序就像 Flash 对象:

  • 它们都是从客户端下载和运行的。

唯一不同的是,Applet 设计了很多访问控制规则,例如,它不能连接到隐藏在公司 DMZ(非军事区)后面的服务器等。

如果是这种情况,我建议您找到一种在小程序之外检索数据的方法(尝试使用 servlet?)

更新 2 JVM 似乎找不到与您签名的 jar 匹配的可信证书。

  1. 由于您的 jar 文件已签名,请确保 jar 文件可以指向您的受信任证书(请记住,它必须是受信任的)。
  2. 更多信息,请查看: http: //faq.javaranch.com/java/HowCanAnAppletReadFilesOnTheLocalFileSystemhttp://www.developer.com/article.php/3303561
于 2010-02-24T09:41:41.873 回答
0

可能与http://download.oracle.com/javase/6/docs/api/java/util/ServiceLoader.html有关。即,一个或多个罐子定义/期望提供者。有时间就调查。

于 2011-03-21T17:02:48.107 回答