JApplet从签名的jar中抛出ClassNotFoundException

时间:2013-08-27 13:22:05

标签: java jar applet classnotfoundexception japplet

我已经构建了一个applet(来自JApplet),它消耗了其他几个jar文件。我已经签署了包含主类的jar,并包含了我需要的所有罐子(我认为)。但是,无论我尝试什么,我都会得到“java.lang.ClassNotFoundException:newposting”,其中'newposting'是我签名jar中的主要类。我正在使用以下html:

<p><applet code="newposting" 
archive="HartfordRowingNewPosting.jar, 
javax.mail.jar, 
jcalendar-1.4.jar, 
junit-4.6.jar, 
jgoodies-common-1.2.0.jar, 
jgoodies-looks-2.4.1.jar, 
mysql-connector-java-5.1.25-bin.jar" 
width="500" height="850">
<param name="permissions" value="sandbox" /> 
<param name="codebase" value="HartfordRowingNewPosting.jar" /> 
</applet></p>

jars和html都位于服务器上的同一文件夹中。我尝试了几种路径规范的组合。我也尝试过使用jnlp但得到同样的错误。在过去一个月左右的时间里,我对此一直感到沮丧。有人可以对此有所了解吗?

1 个答案:

答案 0 :(得分:0)

加载主类时抛出ClassNotFoundException的事实意味着无法从jar中读取您的类,或者无法找到您的jar。

我希望你的确认你的朋友确实在罐子里。如果没有尝试。只是为了确保尝试使用未签名的jar并看到你有完全相同的错误。

如果是这样,你仍有2种可能性。

您确定您的班级确实被称为newposting吗?小写?在默认包中?注意:这必须是完全限定的类名

接下来,测试你的jar确实可用于浏览器。为此,只需将jar名称复制并粘贴到浏览器,并在其前面加上您的URL。例如,如果在http://myhost/myapp/mypage.html尝试网址http://myhost/myapp/HartfordRowingNewPosting.jar下可以使用HTML。

BTW参数codebase是什么意思?它是您的应用程序级别参数吗?我不确定,但请确保这不会使浏览器与标记codebase支持的属性applet混淆。此属性通常为.<applet codebase=".",表示“从当前目录下载jar”。这与从命令行运行java时的java -cp .相同。

顺便说一句,你知道大约10年前applet几乎已经过时了吗?而且据我所知,你将MySql JDBC驱动程序包含在类路径中。您应该明白,在大多数情况下这不起作用,因为通常有一个防火墙不允许客户端和服务器之间的JDBC协议。