我的Jar文件中找不到类

时间:2012-07-19 13:15:03

标签: java applet classnotfoundexception

我在HTML页面中有以下代码

        <applet code="com.griaule.fingerprintsdk.appletsample.FormMain"
            archive="SignedFingerprintSDKJava.jar, AbrirAplicativoAssinado.jar"
            width="515" height="560">
        </applet>

当我运行我的html页面时,出现错误,上面写着"ClassNotFoundException, FormMain.class"

我运行jarscan,我在jar文件中找到了FormMain类。

发生了什么事?

这是我生成jar文件的方式

jar cvf C:\Users\lucas\desktop\AbrirAplicativo.jar C:\Users\lucas\workspace\applet-chave\bin\com\griaule\fingerprintsdk\appletsample\AppletInstaller.class C:\Users\lucas\workspace\applet-chave\bin\com\griaule\fingerprintsdk\appletsample\ColorPane.class C:\Users\lucas\workspace\applet-chave\bin\com\griaule\fingerprintsdk\appletsample\FormMain.class C:\Users\lucas\workspace\applet-chave\bin\com\griaule\fingerprintsdk\appletsample\FormOptions.class C:\Users\lucas\workspace\applet-chave\bin\com\griaule\fingerprintsdk\appletsample\Util.class 

生成密钥

keytool -genkey -dname "cn=AbrirAplicativoApplet, ou=XXX, o=XXX, l=São Paulo, s=SP c=BR" -alias AbrirAplicativoAppletKey -keystore C:\ChaveAbrirAplicativoApplet -storepass 123456 -validity 7300

分配Jar​​文件

jarsigner -keystore C:\users\lucas\desktop\ChaveAbrirAplicativoApplet -storepass 123456 -signedjar "C:\Users\lucas\Desktop\AbrirAplicativoAssinado.jar" "C:\Users\lucas\Desktop\AbrirAplicativo.jar" AbrirAplicativoAppletKey

导出证书

keytool -export -keystore C:\users\lucas\desktop\ChaveAbrirAplicativoApplet -alias AbrirAplicativoAppletKey -file C:\users\lucas\desktop\CertificadoAbrirAplicativoApplet.x509

验证分配

keytool -import -alias AbrirAplicativoAppletKey -file C:\CHAVES\CertificadoAbrirAplicativoApplet.x509

也许我的问题出在PolicyTool

当我尝试添加新的策略条目时,我收到以下错误

java.net.MalformedURLException: no protocol: AbrirAplicativoAssinado.jar

但如果我的jar文件在我的桌面上,如何在此字段中放置URL?

我尝试放http://localhost/AbrirAplicativoAssinado.jar但发生新错误

There is not a public key for the alias AbrirAplicativoAppletKey.

2 个答案:

答案 0 :(得分:1)

确定“未找到课程”应该与签名无关。我认为jar文件与html文件位于同一目录中?

列出多个档案的方式可能存在问题。您可以尝试以下方法:

  • 从档案列表中删除,,只留下空格。
  • ,:替换;(包括空格)。
  • 创建一个仅包含清单的jar文件,并在该清单中添加一个Class-Path属性,列出其他两个归档,用空格分隔。将该文件用作archive=参数。
  • 修改其中一个jar文件以引用其清单的Class-Path属性中的另一个,并仅列出archive=参数中的那个。

它也就像你构建yor jar文件的方式一样,所有的类文件都放在文件的根目录下,没有内部目录结构。 jar文件中的目录结构必须与类的包结构相匹配,即源代码中的package行,以及code=标记的applet参数。

要在jar文件中创建目录结构,请将目录更改为C:\Users\lucas\workspace\applet-chave\bin,然后执行jar cvf C:\Users\lucas\desktop\AbrirAplicativo.jar com以将整个目录com添加到存档。

答案 1 :(得分:0)

您在FormMain页面的某个位置指定.html时应指定的内容为com.griaule.fingerprintsdk.appletsample.FormMain

您在问题中提出的所有签名内容与ClassNotFoundException无关。

我不确定您是否正确构建.jar,它可能包括您的用户路径以及.jar中的Eclipse工作目录。最好花时间设置Maven来构建.jar或者至少使用Eclipse中内置的工具来导出.jar,这样你就可以确定它是正确构建的。手工操作可以解决各种错误。