栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

移除智能卡终端:SCARD_E_NO_SERVICE CardException

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

移除智能卡终端:SCARD_E_NO_SERVICE CardException

这篇文章很老,但是对我来说,解决Windows 8上描述的问题对我很有用。

JR Utily的解决方案无法完全发挥作用:如果拔下读取器然后再次插入,则CardTerminal实例上会出现错误。

因此,我添加了一些代码以清除端子列表,如下面的代码所示。

        Class pcscterminal = Class.forName("sun.security.smartcardio.PCSCTerminals");        Field contextId = pcscterminal.getDeclaredField("contextId");        contextId.setAccessible(true);        if(contextId.getLong(pcscterminal) != 0L)        { // First get a new context value Class pcsc = Class.forName("sun.security.smartcardio.PCSC"); Method SCardEstablishContext = pcsc.getDeclaredMethod(   "SCardEstablishContext",   new Class[] {Integer.TYPE }          ); SCardEstablishContext.setAccessible(true); Field SCARD_SCOPE_USER = pcsc.getDeclaredField("SCARD_SCOPE_USER"); SCARD_SCOPE_USER.setAccessible(true); long newId = ((Long)SCardEstablishContext.invoke(pcsc,          new Object[] { SCARD_SCOPE_USER.getInt(pcsc) } )); contextId.setLong(pcscterminal, newId); // Then clear the terminals in cache TerminalFactory factory = TerminalFactory.getDefault(); CardTerminals terminals = factory.terminals(); Field fieldTerminals = pcscterminal.getDeclaredField("terminals"); fieldTerminals.setAccessible(true); Class classMap = Class.forName("java.util.Map"); Method clearMap = classMap.getDeclaredMethod("clear"); clearMap.invoke(fieldTerminals.get(terminals));        }


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/430864.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号