Java Applet:java.lang.NoClassDefFoundError

时间:2017-06-15 07:48:26

标签: java exception applet

我正在创建一个Java Applet来从客户端签名PDF,并且在Internet Explorer中启动applet时遇到以下错误:

The error I get

这是我的文件夹架构:

Test/
├── Applet.html/
├── PDFSigningApplet.class/
├── jars/
│   └── bcpkix-jdk15on-1.49.jar
│   └── bcprov-jdk15on-1.49.jar
│   └── itextpdf-5.5.11.jar
│   └── itext-pdfa-5.5.11.jar
│   └── ...

以下是我的 HTML 代码:

<html> 

<head> 
<title>Test Smart Card Signer Applet</title> 
<script src="http://java.com/js/deployJava.js"></script>

</head> 

<body>
    <script>
        var attributes = {
                          codebase: '.',
                          code: 'PDFSigningApplet.class',
                          archive: 'jars/bcpkix-jdk15on-1.49.jar, ' +
                                  'jars/bcprov-jdk15on-1.49.jar, ' +
                                  'jars/signing-pdf-applet-1.0-SNAPSHOT.jar, ' +
                                  'jars/commons-imaging-1.0-20170517.221134-118.jar, ' +
                                  'jars/commons-imaging-1.0-SNAPSHOT.jar, ' +
                                  'jars/itextpdf-5.5.11.jar, ' +
                                  'jars/itext-pdfa-5.5.11.jar, ' +
                                  'jars/itext-xtra-5.5.11.jar, ' +
                                  'jars/xmlworker-5.5.11.jar',
                          width: '800',
                          height: '600'
                         };
        var parameters = {java_arguments: ''}; // customize per your needs Xmx256m
        var version = '1.8'; // JDK version
        deployJava.runApplet(attributes, parameters, version);
        console.log("Ran script");
    </script>
    ...

以下是我在 Applet.java 中使用BouncyCastleProvider:

import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfSignatureAppearance;
import com.itextpdf.text.pdf.PdfStamper;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
...
BouncyCastleProvider provider = new BouncyCastleProvider();

这里奇怪的是,所有其他外部库似乎已经很好地导入了,但我得到了BouncyCastleProvider的例外。

根据网上发现的类似问题我已经尝试了什么:

  • 使用以下命令签名我的所有罐子:

    jar ufm myjar.jar addToManifest

    jarsigner my.jar myKey

在我的addToManifest中使用它:

Permissions: all-permissions
Codebase: file:///C:/Users/A667080/Desktop/Test/
Application-Name: PDFSigningApplet
  • 在我的Java设置中为此站点添加了安全例外
  • 我使用7-zip验证我的BouncyCastle jar包含我的applet中使用的.class

我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

好几个小时后我终于找到了问题。我已经正确完成了所有这些设置,但是:

  • Java正在缓存我的所有jar文件,因此同时没有任何改变。要更改此设置,请转到“控制面板”(或“系统偏好设置”)&gt; Java&gt;一般&gt;设置然后取消选中“#34;将临时文件保存在我的计算机上&#34;
  • ”框
  • 我没有重建我的罐子,所以我的所有更改都没有影响我的applet。要使用Maven重建,请使用mvn -U clean installjar -cvf DigitalSignerApplet.jar *.class

我希望它能帮助将来的某些人。