0

我正在开发一个 Java swing 应用程序,我必须使用 hid omnikey 5325 感应读卡器使用 smartcardio api 读取身份证。(Windows XP 操作系统)

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 自己的工作台时,检测到卡,因此卡或读卡器没有问题。

4

2 回答 2

1

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

相反,按名称选择读卡器要好得多。您可以通过使用您ListCardTerminals 然后打印出名称来获取名称(或使用诊断实用程序等,名称是 PCSC 确定的阅读器名称,由您的操作系统使用阅读器特征和序列号编译) .

于 2014-01-23T20:06:18.373 回答
0

解决了这个问题。换行:

CardTerminal 终端 = 终端.get(0); 到 CardTerminal 终端 = terminal.get(1); 成功了。猜猜这个数组从 1 而不是 0 开始。

于 2014-01-23T12:56:59.727 回答