感应卡读卡器 - smartcardio问题

时间:2014-01-22 15:57:24

标签: smartcard contactless-smartcard

我正在开发一个Java swing应用程序,我必须使用hid omnikey 5325读取身份证 使用smartcardio api的感应读卡器。 (windows xp os)

try {
    terminals = factory.terminals().list();
    System.out.println("Terminals: " + terminals);
    // get the first terminal
    CardTerminal terminal = terminals.get(0);
    terminal.waitForCardPresent(0); 
    Card card = terminal.connect("T=0");                    
    System.out.println("Card present!");            
    System.out.println("card: " + card);        
} catch (CardException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
}

代码检测到读卡器,但插入卡时, terminal.waitForCardPresent(0)应该返回,它没有。

当我使用HID自己的工作台时,会检测到卡,因此没有问题 用卡或读卡器。

2 个答案:

答案 0 :(得分:1)

您只使用索引从列表中选择卡终端。这不是选择终端最可靠的方法。你得到错误终端的原因是阅读器包含联系人和非接触式阅读器,它们是系统的独立阅读器。所以你在等待插入联系卡。

相反,choose a card reader by name要好得多。您可以使用List CardTerminal来获取名称,然后打印name(或使用诊断实用程序等,名称是PCSC为读者确定的名称,由您的操作系统使用读卡器特征和序列号编译。

答案 1 :(得分:0)

解决了这个问题。 更改行:

CardTerminal terminal = terminals.get(0); 至 CardTerminal terminal = terminals.get(1);做了伎俩。 猜猜这个数组从1而不是0开始。