有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在我的Jar文件中找不到java类

我在HTML页面中有以下代码

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

当我运行html页面时,a收到一个错误,上面写着:"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) 个答案

  1. # 1 楼答案

    好的,“找不到类”应该与签名无关。我认为jar文件与html文件位于同一目录中

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

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

    它还类似于您构建jar文件的方式,所有类文件都将放在文件的根目录中,而没有内部目录结构。jar文件中的目录结构必须与类的包结构相匹配,即源代码中的package行,以及applet标记的code=参数

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

  2. # 2 楼答案

    您正在FormMain页面上的某处指定.html,而您应该指定的是com.griaule.fingerprintsdk.appletsample.FormMain

    你在问题中提出的所有签名内容都与a ClassNotFoundException无关

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