java实时获取acr122u的打卡信息

我是用下面的方法来实现实时读取,用了定时器,但是当多次打卡之后再使用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();
        }
    }
}

card.disconnect(true);
断开连接后有没有重新连接呢?

那你应该用log4j打印一下还原异常的场景,然后解决问题。