Class CardTerminals

java.lang.Object
javax.smartcardio.CardTerminals

public abstract class CardTerminals extends Object
终端工厂支持的终端集合。此类允许应用程序枚举可用的CardTerminals,获取特定的CardTerminal,或等待卡片的插入或移除。

此类是多线程安全的,可以被多个线程同时使用。但是,此对象跟踪每个终端的卡片存在状态。如果需要独立调用waitForChange(),应使用多个对象。

应用程序可以通过调用TerminalFactory.terminals()来获取此类的实例。

自版本:
1.6
参见:
  • Constructor Details

    • CardTerminals

      protected CardTerminals()
      构造一个新的CardTerminals对象。

      此构造方法仅由子类调用。应用程序应调用TerminalFactory.terminals()来获取CardTerminals对象。

  • Method Details

    • list

      public List<CardTerminal> list() throws CardException
      返回所有可用终端的不可修改列表。
      返回:
      所有可用终端的不可修改列表。
      抛出:
      CardException - 如果卡操作失败
    • list

      public abstract List<CardTerminal> list(CardTerminals.State state) throws CardException
      返回匹配指定状态的所有终端的不可修改列表。

      如果状态为State.ALL,此方法返回此对象封装的所有CardTerminals。如果状态为State.CARD_PRESENTState.CARD_ABSENT,则分别返回当前存在或不存在卡片的所有CardTerminals。

      如果状态为State.CARD_INSERTIONState.CARD_REMOVAL,则返回在上一次调用waitForChange()时检测到插入(或移除)的所有CardTerminals。如果在此对象上未调用waitForChange()CARD_INSERTION等同于CARD_PRESENTCARD_REMOVAL等同于CARD_ABSENT。有关CARD_INSERTION的使用示例,请参见waitForChange()

      参数:
      state - 状态
      返回:
      匹配指定状态的所有终端的不可修改列表。
      抛出:
      NullPointerException - 如果状态为null
      CardException - 如果卡操作失败
    • getTerminal

      public CardTerminal getTerminal(String name)
      返回具有指定名称的终端,如果不存在则返回null。
      参数:
      name - 终端名称
      返回:
      返回具有指定名称的终端,如果不存在则返回null。
      抛出:
      NullPointerException - 如果名称为null
    • waitForChange

      public void waitForChange() throws CardException
      等待此对象的任一终端中插入或移除卡片。

      此调用等效于调用waitForChange(0)

      抛出:
      IllegalStateException - 如果此CardTerminals对象不包含任何终端
      CardException - 如果卡操作失败
    • waitForChange

      public abstract boolean waitForChange(long timeout) throws CardException
      等待此对象的任一终端中插入或移除卡片,或直到超时到期。

      此方法检查此对象的每个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 - 如果卡操作失败