我是用下面的方法来实现实时读取,用了定时器,但是当多次打卡之后再使用list就会报错了,所以想问问怎么实现实时读取acr122u智能卡的打卡信息的
// 大多数时候可以
public synchronized void doTask3() throws Exception {
try {
TerminalFactory terminalFactory = TerminalFactory.getDefault();
// terminalFactory.terminals().waitForChange(1);
List<CardTerminal> cardTerminals = terminalFactory.terminals().list();
// System.out.println("Terminals: " + cardTerminals);
if (cardTerminals.isEmpty()) {
return;
}
CardTerminal cardTerminal = cardTerminals.get(0);
Card card = cardTerminal.connect("T=1");
CardChannel channel = card.getBasicChannel();// 打开通道
CommandAPDU getUID = new CommandAPDU(0xFF, 0xCA, 0x00, 0x00, 0x04);// 中文API第12页
ResponseAPDU r = channel.transmit(getUID);// 发送getUID指令
String data = bytesToHexString(r.getData());
System.out.println("UID: " + r.toString());// 返回:UID: ResponseAPDU: 6 bytes, SW=9000
System.out.println("Data:" + bytesToHexString(r.getData()));
card.disconnect(true);
System.out.println("OK.");
}catch (Exception ex ){
return;
}
}
@Component
public class Scheduler {
@Autowired
Task task;
@Scheduled(cron = "0/1 * * * * ?")
public void myTask(){
try {
System.out.println(1);
task.doTask3();
} catch (Exception e) {
e.printStackTrace();
}
}
}