Java 小程序:java.lang.NoClassDefFoundError
Java Applet : java.lang.NoClassDefFoundError
我正在制作一个 Java 小程序来从客户端签署 PDF,在 Internet Explorer 中启动小程序时遇到以下错误:
这是我的文件夹架构:
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>
...
这里是 BouncyCastleProvider 在我的 Applet.java 中的使用:
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 进行签名:
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 包含我的小程序中使用的 .class
我错过了什么吗?
好的,又过了几个小时,我终于找到了问题所在。我已经正确完成了所有这些设置,但是:
- Java 正在缓存我所有的 jar 文件,因此在此期间不会发生任何变化。要更改此设置,请转至控制面板(或系统偏好设置)> Java > 常规 > 设置,然后取消选中显示 "Keep temporary files on my computer"
的框
- 我没有重建我的罐子,所以 none 我的更改影响了我的小程序。要使用 Maven 重建,请使用
mvn -U clean install
或 jar -cvf DigitalSignerApplet.jar *.class
否则。
希望以后能对一些人有所帮助。
我正在制作一个 Java 小程序来从客户端签署 PDF,在 Internet Explorer 中启动小程序时遇到以下错误:
这是我的文件夹架构:
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>
...
这里是 BouncyCastleProvider 在我的 Applet.java 中的使用:
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 进行签名:
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 包含我的小程序中使用的 .class
我错过了什么吗?
好的,又过了几个小时,我终于找到了问题所在。我已经正确完成了所有这些设置,但是:
- Java 正在缓存我所有的 jar 文件,因此在此期间不会发生任何变化。要更改此设置,请转至控制面板(或系统偏好设置)> Java > 常规 > 设置,然后取消选中显示 "Keep temporary files on my computer" 的框
- 我没有重建我的罐子,所以 none 我的更改影响了我的小程序。要使用 Maven 重建,请使用
mvn -U clean install
或jar -cvf DigitalSignerApplet.jar *.class
否则。
希望以后能对一些人有所帮助。