类 CardTerminals

java.lang.Object
javax.smartcardio.CardTerminals

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

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

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

自从:
1.6
参见:
  • 构造方法详细信息

    • CardTerminals

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

      此构造函数仅由子类调用。应用程序应调用 TerminalFactory.terminals() 以获得 CardTerminals 对象。

  • 方法详情

    • list

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

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

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

      如果 state 是 State.CARD_INSERTION State.CARD_REMOVAL ,它返回在上次调用 waitForChange() 期间检测到插入(或移除)的所有 CardTerminal。如果尚未在此对象上调用 waitForChange(),则 CARD_INSERTION 等同于 CARD_PRESENTCARD_REMOVAL 等同于 CARD_ABSENT。有关使用 CARD_INSERTION 的示例,请参阅 waitForChange()

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

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

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

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

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

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

      此方法检查此对象的每个 CardTerminal。如果自从上次调用 waitForChange() 后将卡插入 CardTerminal 或从 CardTerminal 中取出,它会立即返回。否则,或者如果这是第一次调用此对象上的 waitForChange(),它将阻塞,直到将卡插入 CardTerminal 或从 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)) {
           // examine Card in terminal, return if it matches
         }
         terminals.waitForChange();
       }
      参数:
      timeout - 如果为正,则最多阻塞 timeout 毫秒;如果为零,则无限期阻塞;不得为负
      返回:
      如果方法由于超时过期而返回,则为 false,否则为 true。
      抛出:
      IllegalStateException - 如果这个 CardTerminals 对象不包含任何终端
      IllegalArgumentException - 如果超时为负
      CardException - 如果卡片操作失败