我在JavaFX中创建了与智能卡交互的应用程序(通过位于sun.security.pkcs11.SunPKCS11
的类jre/lib/ext/sunpkcs11.jar
)。当maven jfx:run
目标(javafx-maven-plugin
插件)被执行时,该程序运行良好。
不幸的是在创建jar存档(使用jfx:jar
目标)并运行结果jar之后。应用程序在启动时抛出异常:
Caused by: java.lang.ClassNotFoundException: sun.security.pkcs11.SunPKCS11
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 12 more
通过在本地安装sunpkcs11.jar
到maven并在项目pom文件中添加依赖项,我找到了解决此问题的简单方法。正如我所提到的,这样的解决方案是"解决方法"看起来很难看
为什么应用程序找不到作为"标准"之一的库?那些?是使用自定义类加载器的JavaFX jar,它看不到这个库吗?
即使我使用自己的JRE
创建本机包(我的情况下是.exe),也无法看到该类。
更新
这不是评论中链接的问题的重复,我有32位JDK和JRE。 JAVA_HOME
也指向32位JRE。
答案 0 :(得分:0)
我也有同样的问题。我已经通过将安全库复制到lib
目录(使用maven-antrun-plugin
来解决这个问题来解决它,但你可以找到自己的方法来实现这一目标。)
您可能需要从jre安装中复制sunpkcs11.jar
文件。