分析我的应用程序(使用你的工具包),我在java api中看到了一个死锁(冻结了7小时23m 14秒)。
这是分析器打印的内容:
Frozen threads found (potential deadlock)
It seems that the following threads have not changed their stack for more than 10 seconds.
These threads are possibly (but not necessarily!) in a deadlock or hung.
Thread-13 <--- Frozen for at least 7h 23m 14 sec
sun.security.smartcardio.PCSC.SCardListReaders(long)
sun.security.smartcardio.PCSCTerminals.list(CardTerminals$State)
javax.smartcardio.CardTerminals.list()
xxx.xxxxxx.cardreader.CardReader.run()这就是我如何使用api (我只提取有用的代码)
public void run() {
protocolArr = {"T=0", "T=1"}
while(true) {
try {
Thread.sleep(1000);
TerminalFactory terminalFactory = TerminalFactory.getDefault();
List<CardTerminal> terminalList = terminalFactory.terminals().list();
for(CardTerminal terminal : terminalList) {
Card card = null;
// establish a connection with the card
for(String protocol : protocolArr) {
try {
card = terminal.connect(protocol);
break;
} catch(Exception e) {
}
}
if(card == null)
continue;
// The card is valorized
CardChannel channel = card.getBasicChannel();
// SN request
byte[] byteArr = new byte[5];
// FFh FCh 01h 00h 00h
byteArr[0] = (byte) 0xFF;
byteArr[1] = (byte) 0xFC;
byteArr[2] = 0x00; // 00h : ATQA + SN + SAK
byteArr[3] = 0x00;
byteArr[4] = 0x00;
ResponseAPDU r = channel.transmit(new CommandAPDU(byteArr));
// 44h 03h 04h 26h 47h 09h 48h E8h 10h 20h 90h 00h (example)
// ATQA = 44h 03h 04h
// SN = 26h 47h 09h 48h E8h 10h (7 bytes)
// SAK = 20h
byte[] response = r.getBytes();
// disconnect
card.disconnect(false);
}
} catch(Exception e) {
}
}
}有没有人遇到过这个问题,有没有解决方法?
发布于 2014-04-03 05:12:40
最好使用waitForChange方法,而不是轮询卡片终端。
注意,CardTerminals是从terminalFactory.terminals()返回的,所以在调用list()之前。
https://stackoverflow.com/questions/22805440
复制相似问题