2010-02-24 57 views
5

我得到了ff。错误Java控制台偶尔:Applet类加载器无法在jar中找到其中一个类

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> 

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

我知道applet fails to load class from jarApplet class loader cannot find a class in the applet's jar但我认为它们不适用于我的情况。 SomeClass和MyApplet位于同一个jar中,并且该页面正在本地访问。

+0

我认为会发生什么是Java浏览器插件无法从myApplet__0.0.1177加载类。jar等,所以去代码库文件夹中寻找它。现在的问题是,它如何能够加载MyApplet而不是SomeClass? – 2010-03-12 02:57:41

+0

客户端使用什么版本的Java? – uthark 2010-03-22 12:24:55

+0

您表示该页面正在本地访问,但在日志中我看到“myserver”。你的localhost机器的这个名字是? 另外,你用什么浏览器来测试? Internet Explorer,Firefox? – uthark 2010-03-22 12:30:13

回答

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

这看起来像从HTTPS服务器检索jar文件时存在连接问题。

我不确切知道您运行的是哪个版本的Java,但您可以检查与您的问题here有关的缺陷的原因。

如果这不是问题,那么请确保在下载时有足够的JAR文件缓存,否则无法启动。不幸的是这不是代码问题。

UPDATE您的班级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)对象:

  • 他们都下载并从客户端上运行。

唯一的区别是小程序在设计时大量的访问控制规则,例如,它不能连接到隐藏在公司DMZ(非军事区)服务器等

如果是这样的话,我建议你找到一种方法来检索你的数据以外的小程序(尝试servlet?)

更新2看来JVM找不到可信证书来匹配您签名的jar。

  1. 由于您的jar文件签署确保jar文件可以指向可信证书(请记住,它必须是可信的)。
  2. 的更多信息,请查看:http://faq.javaranch.com/java/HowCanAnAppletReadFilesOnTheLocalFileSystemhttp://www.developer.com/article.php/3303561
+0

如果是连接问题,那么异常消息中的URL是不是应该是https:// myserver/mycontext/applets/myApplet__0.0.1177.jar?看来插件正在代码库中查找类文件本身。 – 2010-03-11 08:21:36

+0

查看我更新的帖子。 – 2010-03-11 11:30:16

+0

SomeClass未访问任何远程服务器或数据库。但是,它从本地文件系统读取文件。我已经在一个特权的电话中包装了它。我也签了罐子。 我认为Java浏览器插件正在进行特权访问。 – 2010-03-12 03:01:15

0

可能有事情做与​​。即,一个或多个罐子定义/期望提供者。调查时间。

相关问题