big sur 11.0.1和pc/sc库的问题

ljsrvy3e  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(653)

我对最新版本的macos(bigsur 11.0.1)和库pc/sc有问题;在bigsur之前,程序使用的库工作得很好,但是在更新之后就不再工作了。我使用的是java版本1.8.0ď
在代码中,我使用 TerminalFactory.getDefaultType() 获取终端工厂的默认类型。更新前我收到“pc/sc”,但更新后我没有收到任何。
如果我想用这条线强制连接到一个示例 TerminalFactory factory = TerminalFactory.getInstance("PC/SC", null); 它将返回以下错误:

  1. java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: PC/SC, provider: SunPCSC, class: sun.security.smartcardio.SunPCSC$Factory)
  2. at java.security.Provider$Service.newInstance(Provider.java:1711)
  3. at sun.security.jca.GetInstance.getInstance(GetInstance.java:243)
  4. at sun.security.jca.GetInstance.getInstance(GetInstance.java:190)
  5. at javax.smartcardio.TerminalFactory.getInstance(TerminalFactory.java:245)
  6. at prueba.Prueba.isConnected(Prueba.java:165)
  7. at prueba.Prueba.main(Prueba.java:63)
  8. Caused by: java.lang.UnsupportedOperationException: PC/SC not available on this platform
  9. at sun.security.smartcardio.PCSC.checkAvailable(PCSC.java:46)
  10. at sun.security.smartcardio.SunPCSC$Factory.<init>(SunPCSC.java:59)
  11. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  12. at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
  13. at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
  14. at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
  15. at java.security.Provider$Service.newInstance(Provider.java:1703)
  16. ... 5 more
  17. Caused by: java.io.IOException: No PC/SC library found on this system
  18. at sun.security.smartcardio.PlatformPCSC.getLibraryName(PlatformPCSC.java:122)
  19. at sun.security.smartcardio.PlatformPCSC.access$000(PlatformPCSC.java:43)
  20. at sun.security.smartcardio.PlatformPCSC$1.run(PlatformPCSC.java:64)
  21. at sun.security.smartcardio.PlatformPCSC$1.run(PlatformPCSC.java:60)
  22. at java.security.AccessController.doPrivileged(Native Method)
  23. at sun.security.smartcardio.PlatformPCSC.<clinit>(PlatformPCSC.java:60)
  24. at sun.security.smartcardio.SunPCSC$Factory.<init>(SunPCSC.java:59)
  25. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  26. at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
  27. at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
  28. at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
  29. at java.security.Provider$Service.newInstance(Provider.java:1703)
  30. at sun.security.jca.GetInstance.getInstance(GetInstance.java:243)
  31. at sun.security.jca.GetInstance.getInstance(GetInstance.java:190)
  32. at javax.smartcardio.TerminalFactory.getInstance(TerminalFactory.java:245)
  33. at javax.smartcardio.TerminalFactory.<clinit>(TerminalFactory.java:106)
  34. at prueba.Prueba.isConnected(Prueba.java:164)
  35. ... 1 more
  36. entro isConnected--2
  37. Exception in thread "main" java.lang.NullPointerException
  38. at prueba.Prueba.isConnected(Prueba.java:173)
  39. at prueba.Prueba.main(Prueba.java:63)

我发现bigsur消除了pc/sc库,因此无法安装它。
我不知道´我不知道是有人犯了同样的错误还是有人已经解决了。
谢谢你的帮助。

sy5wg1nm

sy5wg1nm1#

由于macos big-sur的变化,java pc/sc实现不再正常工作:https://bugs.openjdk.java.net/browse/jdk-8255877
解决方法是设置系统属性: sun.security.smartcardio.library=/System/Library/Frameworks/PCSC.framework/Versions/Current/PCSC 在尝试使用之前 TerminalFactory .

相关问题