【问题标题】:Class Not Found in my Jar File在我的 Jar 文件中找不到类
【发布时间】:2023-03-11 12:05:01
【问题描述】:

我在 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.

【问题讨论】:

  • 复制/粘贴jar -tvf the.jar 的结果,其中the.jar 是该类所在的Jar。我同意这与签名无关。节省一些空间并编辑该信息。出来。
  • 你的清单可以是什么?单词多总比少好,因为我不喜欢玩“20 个问题”。

标签: java applet classnotfoundexception


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 如果我在代码属性中将标签 Applet 仅放入​​ FormMain,则会发生异常 NoClassDefFoundError, FormMain(错误名称:com/griaule/fingerprintsdk/appletsample/FormMain)。我将所有创建的文件放在同一个目录中
  • 好的,异常意味着java插件现在可以直接在jar中打开文件FormMain.class,但是会拒绝加载它,因为文件指出它应该属于一个包@987654336 @ 反而。因此,将 html 恢复到之前的状态,并使用目录结构创建您的 jar。
  • 但是Jar命令,我只能通过java/jdk1.7.0_05/bin目录运行,在那里我可以找到jar命令。当我在这个 direcott 之外执行时,出现“jar”不被识别为实习生命令的错误
  • 听起来您想将 java bin 目录添加到您的 PATH 环境变量中。或者通过提供完整路径来调用jar
  • 或者使用 ant 来构建你的 java 东西。
【解决方案2】:

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

您在问题中添加的所有签名内容都与ClassNotFoundException 无关。

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

【讨论】:

  • 在我的html页面中,只有html正文和标签小程序。我的标签小程序就像我说的那样,code="com.griaule.fingerprintsdk.appletsample.FormMain"。这只是一个简单的 html 页面来测试我的小程序。
  • 在 Eclipse 中应该导出为 JAR 文件?
猜你喜欢
  • 1970-01-01
  • 2013-07-25
  • 2017-01-22
  • 1970-01-01
  • 2017-12-10
  • 2018-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多