我正在开发一个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自己的工作台时,会检测到卡,因此没有问题 用卡或读卡器。
答案 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开始。