3

我尝试开发一个访问智能卡的 javafx 应用程序。

我有一个简单的概念证明,如下所示:

package javafxapplication7;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
import sun.security.pkcs11.SunPKCS11;


public class SampleController implements Initializable {

   @FXML
   private Label label;

   @FXML
   private void handleButtonAction(ActionEvent event) {
      SunPKCS11 a = new SunPKCS11();
   }

   @Override
   public void initialize(URL url, ResourceBundle rb) {
       // TODO
   }    
}

并且执行是:

Caused by: java.lang.NoClassDefFoundError: sun/security/pkcs11/SunPKCS11
at javafxapplication7.SampleController.handleButtonAction(SampleController.java:26)
4

2 回答 2

3

只需在 64 位 JDK 旁边(或代替)安装 32 位 JDK,并确保使用 32 位版本编译和签名 JAR/COD 文件。

实际上这是64 位版本中的一个错误.. http://bugs.sun.com/bugdatabase/view_bug.do;jsessionid=f1279f413fd19e3a247022d6dcca9?bug_id=7105065

我在以下讨论中找到了它:-

http://www.java.net/node/703858

http://tai-dev.blog.co.uk/2009/11/11/are-you-seeing-the-java-lang-noclassdeffounderror-sun-security-pkcs11-sunpkcs11-error-when-signing-your- rim-blackberry-j2me-apps-7352729/

http://community.igniterealtime.org/thread/30821

于 2013-04-03T12:27:08.870 回答
0

无论您为什么遇到此特定问题,都不要使用sun.*类。它们不是为公众使用而设计的。

您可能希望使用SunPKCS11JCE 提供程序来处理您的智能卡。查看本指南以帮助您入门:http ://docs.oracle.com/javase/1.5.0/docs/guide/security/p11guide.html 。

于 2013-04-03T12:24:56.533 回答