此类是多线程安全的,可以被多个线程同时使用。但是,此对象跟踪每个终端的卡片存在状态。如果需要独立调用waitForChange(),应使用多个对象。
应用程序可以通过调用TerminalFactory.terminals()来获取此类的实例。
- 自版本:
- 1.6
- 参见:
-
Nested Class Summary
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptiongetTerminal
(String name) 返回具有指定名称的终端,如果不存在则返回null。list()
返回所有可用终端的不可修改列表。abstract List
<CardTerminal> list
(CardTerminals.State state) 返回匹配指定状态的所有终端的不可修改列表。void
等待此对象的任一终端中插入或移除卡片。abstract boolean
waitForChange
(long timeout) 等待此对象的任一终端中插入或移除卡片,或直到超时到期。
-
Constructor Details
-
CardTerminals
protected CardTerminals()构造一个新的CardTerminals对象。此构造方法仅由子类调用。应用程序应调用TerminalFactory.terminals()来获取CardTerminals对象。
-
-
Method Details
-
list
返回所有可用终端的不可修改列表。- 返回:
- 所有可用终端的不可修改列表。
- 抛出:
-
CardException
- 如果卡操作失败
-
list
返回匹配指定状态的所有终端的不可修改列表。如果状态为
State.ALL
,此方法返回此对象封装的所有CardTerminals。如果状态为State.CARD_PRESENT
或State.CARD_ABSENT
,则分别返回当前存在或不存在卡片的所有CardTerminals。如果状态为
State.CARD_INSERTION
或State.CARD_REMOVAL
,则返回在上一次调用waitForChange()时检测到插入(或移除)的所有CardTerminals。如果在此对象上未调用waitForChange()
,CARD_INSERTION
等同于CARD_PRESENT
,CARD_REMOVAL
等同于CARD_ABSENT
。有关CARD_INSERTION
的使用示例,请参见waitForChange()
。- 参数:
-
state
- 状态 - 返回:
- 匹配指定状态的所有终端的不可修改列表。
- 抛出:
-
NullPointerException
- 如果状态为null -
CardException
- 如果卡操作失败
-
getTerminal
返回具有指定名称的终端,如果不存在则返回null。- 参数:
-
name
- 终端名称 - 返回:
- 返回具有指定名称的终端,如果不存在则返回null。
- 抛出:
-
NullPointerException
- 如果名称为null
-
waitForChange
等待此对象的任一终端中插入或移除卡片。此调用等效于调用waitForChange(0)。
- 抛出:
-
IllegalStateException
- 如果此CardTerminals
对象不包含任何终端 -
CardException
- 如果卡操作失败
-
waitForChange
等待此对象的任一终端中插入或移除卡片,或直到超时到期。此方法检查此对象的每个CardTerminal。如果自上一次调用
waitForChange()
以来有卡片插入或移除CardTerminal,则立即返回。否则,或者如果这是对此对象的第一次调用waitForChange()
,则阻塞直到卡片插入或移除CardTerminal。如果
timeout
大于0,则方法在timeout
毫秒后返回,即使状态没有变化。在这种情况下,此方法返回false
;否则返回true
。此方法通常与
list(State.CARD_INSERTION)
结合在循环中使用,例如:TerminalFactory factory = ...; CardTerminals terminals = factory.terminals(); while (true) { for (CardTerminal terminal : terminals.list(CARD_INSERTION)) { // 检查终端中的卡片,如果匹配则返回 } terminals.waitForChange(); }
- 参数:
-
timeout
- 如果为正数,则最多阻塞timeout
毫秒;如果为零,则无限期阻塞;不能为负数 - 返回:
- 如果方法由于超时到期而返回,则为false,否则为true。
- 抛出:
-
IllegalStateException
- 如果此CardTerminals
对象不包含任何终端 -
IllegalArgumentException
- 如果超时为负数 -
CardException
- 如果卡操作失败
-