Java Applet部署,ClassNotFoundException(主类)

时间:2010-06-10 01:02:30

标签: java deployment applet

这让我感到困惑。我已检查并重新检查拼写和路径。我已经尝试了几乎所有路径组合,包括相对,绝对和完整的http路径。尝试加载Java小程序时,我继续收到以下错误:

java.lang.ClassNotFoundException: AppletClient.class
    at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Exception: java.lang.ClassNotFoundException: AppletClient.class

用于加载applet的HTML:

<applet width="100" height="100" archive="applet/myapplet.jar, applet/applet_dependency.jar" code="AppletClient.class">
    <param value="blahblah" name="username">
    <param value="false" name="codebase_lookup">
</applet>

applet位于当前页面路径的相对目录“applet”中。我解压缩了jar文件,可以看到AppletClient.class。此外,在项目的源头,它是拼写的(套管和所有)。我试过/没有参数。我已经在applet include标签中更改了存档jar的名称,只是为了查看错误的文件名是否会出现不同的错误(相同的错误)。

我在罐子上手动完成GET以确保服务器响应请求(它是)。

我尝试使用和不使用codebase标记,使用所有不同类型的路径(在这些路径上开始出现错误的“幻数”错误。)

我知道当依赖项无法加载时,有时会弹出此错误,因此可能会产生误导,但所有依赖项都存在,占用,并且可通过手动GET获取。

在每次尝试之间,我总是在FireFox中清除缓存。这些问题也在IE8和Chrome中重现。

根据浏览器中的Java控制台,我正在运行Java Plug-in 1.6.0_20。这是我开发applet的同一台机器,它通过Eclipse运行良好。

最后,我踢了Fiddler2,我没有看到任何地方的jar文件请求主机站点从我的Visual Studio调试器运行,所以它在localhost上运行。但我看到了对Fiddler所有其他资源的要求。只是......没有罐子。任何地方。我清除了日志,清除了我的浏览器缓存,并进行了ctrl-R刷新。而且,在Fiddler日志中没有一个Jar请求。

一旦所有Fiddler活动放慢,我甚至在加载页面后对applet标签进行了延迟写入(使用JS)。该元素被写入文档(我可以看到100x100 Java错误窗口),但不会出现单个请求显示在Fiddler上。

任何建议,在我爬到角落里哭泣自己睡觉之前?

编辑:从Java控制台,如果我点击“l”(el)到“转储类加载器列表”,我看到的内容如下:

Live entry: key=http://localhost:55446/BaseWebSite/,http://localhost:55446/BaseWebSite/applet/myappliet.jar, http://localhost:55446/BaseWebSite/applet/applet_dependency.jar, refCount=1, threadGroup=sun.plugin2.applet.Applet2ThreadGroup[name=http://localhost:55446/BaseWebSite/-threadGroup,maxpri=4]

编辑2:applet做了一些网络(Jabber / XMPP),所以我做了一个自签名证书,看看是否有帮助。获得有关自签名证书的提示 - 所以它正在阅读某些内容 - 但仍然无效。并且出现在Java缓存文件列表中......但在Fiddler上仍然没有。

2 个答案:

答案 0 :(得分:0)

我认为Java插件有自己的缓存,你可能想要尝试并清空。我正在运行Windows,我在控制面板中找到它。在常规选项卡中,有一个Temporary Internet Files部分,看看你能在那里找到什么吗?

在设置对话框中,我可以在硬盘上看到缓存的.jars的位置,我不得不在几次手动核对它。

此外,请确保通过在控制台中按x来清除类加载器缓存。

只是为了确保AppletClient是否真的在默认的类路径中,即不在包中?如果没有,您需要在标记中引用合格的类名(code="your.package.AppletClient")。

更新:

在这一点上,根据具体的建议,除非你已经拥有,否则你可以做的是尝试另一种标记样式,看看是否有任何变化。这是我用过的东西:

<object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" width="380" height="260">
    <param name="code" value="AppletClient" />
    <param name="archive" value="applet/myapplet.jar,applet/applet_dependency.jar" />
    <comment>
        <embed
            code="AppletClient.class"
            type="application/x-java-applet;version=1.6"
            archive="applet/myapplet.jar,applet/applet_dependency.jar"
            width="380"
            height="260">
            <noembed>No Java Support.</noembed>
        </embed>
     </comment>
</object>

答案 1 :(得分:0)

事实证明我的问题实际上是一系列问题。我会暂时解决一个,但由于那不起作用(因为还有其他问题),我会回复并尝试另一种方法。

我在这里尝试了很多不同的东西,我不确定完全修复是什么。但是,我认为它归结为什么

1)由于我的applet使用网络组件(Jabber / XMPP),因此需要进行签名。

2)即使在测试的早期,我确认jar文件以正确的方式打包,在根目录下使用Applet.class,稍后在我的调试中我创建了一个NAnt构建脚本来简化构建/为我签名/部署过程。这个构建脚本从一个工作目录打包jar,该工作目录不是应用程序的根目录。因此,AppletClient.class不再位于root用户,而是嵌套在服务器子目录中。