小编Iva*_*hov的帖子

JVM在退出时挂起

我正在开发一个小应用程序,应该使用数字签名和退出来签署文档.签名可以在PKCS#12存档(.pfx文件)中或在智能卡设备上.

使用pfx文件很简单,工作正常.

但是,有时使用智能卡设备,该过程会挂起在Windows 8 PC上.

文档已正确签名,但该过程不会终止.它只是挂起.

我正在使用Sun的PKCS#11提供商 - sun.security.pkcs11.SunPKCS11

基本上我这样做:

SunPKCS11 provider = new SunPKCS11(configuration);
Security.addProvider(provider);

..... some work .....

provider.logout()
Security.removeProvider(provider);
Run Code Online (Sandbox Code Playgroud)

现在......即使我System.exit(0)main方法结束时调用或抛出异常,我也可以在输出中看到堆栈跟踪,但进程不会终止.

我添加了一个关闭钩子,看它是否被执行,它是,即JVM正试图停止.

悬挂很少发生,仅在Windows 8 PC上发生.尝试使用不同的智能卡,它只发生在使用的卡上cmp11.dll(dll由智能卡供应商提供).

但是,使用相同的dll与智能卡进行通信在Windows 7,XP或某些Windows 8 PC上运行良好

在x86或x64 Windows 8上使用Java 8,Update 45运行它

试图获取一个线程转储来查看挂起的内容:

public static void main(String[] args) {
  // do my job, register provider, sign documents, remove provider ...

  for(int i = 0; i < 20; ++i) {
    System.err.println("Sleep... " + i);
    Thread.sleep(2 * 1000);
  }
  System.err.println("Exiting...");
}
Run Code Online (Sandbox Code Playgroud)

如果我 …

java jvm pkcs#11 java-8 windows-8

7
推荐指数
1
解决办法
1160
查看次数

标签 统计

java ×1

java-8 ×1

jvm ×1

pkcs#11 ×1

windows-8 ×1