Module java.desktop
Package java.awt

Class EventQueue

java.lang.Object
java.awt.EventQueue

public class EventQueue extends Object
EventQueue是一个平台无关的类,用于排队事件,既可以来自底层对等类,也可以来自受信任的应用程序类。

它封装了异步事件分发机制,该机制从队列中提取事件,并通过调用此EventQueue上的dispatchEvent(AWTEvent)方法来分派它们,事件作为参数传递。此机制的特定行为取决于实现。唯一的要求是实际排入此队列的事件(请注意,发布到EventQueue的事件可以合并)被分派:

顺序地。
也就是说,不允许同时分派此队列中的多个事件。
以排入的顺序相同。
也就是说,如果AWTEvent A在AWTEvent B之前排入EventQueue,则事件B将在事件A之前不会被分派。

某些浏览器将不同代码库中的小程序分隔成不同的上下文,并在这些上下文之间建立墙壁。在这种情况下,每个上下文将有一个EventQueue。其他浏览器将所有小程序放入同一个上下文中,这意味着所有小程序将只有一个全局EventQueue。此行为取决于实现。请查阅您浏览器的文档以获取更多信息。

有关事件分发机制的线程问题的信息,请参阅AWT线程问题

自:
1.1
  • Constructor Details

    • EventQueue

      public EventQueue()
      初始化一个新的EventQueue实例。
  • Method Details

    • postEvent

      public void postEvent(AWTEvent theEvent)
      EventQueue发布一个1.1风格的事件。如果队列中已存在具有相同ID和事件源的事件,则将调用源ComponentcoalesceEvents方法。
      参数:
      theEvent - java.awt.AWTEvent的实例,或其子类
      抛出:
      NullPointerException - 如果theEventnull
    • getNextEvent

      public AWTEvent getNextEvent() throws InterruptedException
      EventQueue中移除一个事件并返回它。此方法将阻塞,直到另一个线程发布了一个事件。
      返回:
      下一个AWTEvent
      抛出:
      InterruptedException - 如果任何线程中断了此线程
    • peekEvent

      public AWTEvent peekEvent()
      返回EventQueue上的第一个事件,但不移除它。
      返回:
      第一个事件
    • peekEvent

      public AWTEvent peekEvent(int id)
      返回具有指定id的第一个事件(如果有)。
      参数:
      id - 所需事件类型的id
      返回:
      指定id的第一个事件,如果没有这样的事件,则返回null
    • dispatchEvent

      protected void dispatchEvent(AWTEvent event)
      分派一个事件。事件的分派方式取决于事件的类型和事件的源对象的类型:
      事件类型、源类型和分派方法
      事件类型 源类型 分派至
      ActiveEvent 任何 event.dispatch()
      Other Component source.dispatchEvent(AWTEvent)
      Other MenuComponent source.dispatchEvent(AWTEvent)
      Other Other 无操作(被忽略)
      参数:
      event - java.awt.AWTEvent的实例,或其子类
      抛出:
      NullPointerException - 如果eventnull
      自:
      1.2
    • getMostRecentEventTime

      public static long getMostRecentEventTime()
      返回与调用线程关联的EventQueue从队列中分派的最近具有时间戳的事件的时间戳。如果当前正在分派带有时间戳的事件,则将返回其时间戳。如果尚未分派任何事件,则将返回EventQueue的初始化时间。在当前版本的JDK中,只有InputEventActionEventInvocationEvent具有时间戳;但是,将来的JDK版本可能会向其他事件类型添加时间戳。请注意,此方法应仅从应用程序的事件分派线程中调用。如果从另一个线程调用此方法,则将返回当前系统时间(由System.currentTimeMillis()报告)。
      返回:
      最后一个被分派的InputEventActionEventInvocationEvent的时间戳,或如果在非事件分派线程上调用此方法,则返回System.currentTimeMillis()
      自:
      1.4
      参见:
    • getCurrentEvent

      public static AWTEvent getCurrentEvent()
      返回由调用线程关联的EventQueue当前正在分派的事件。如果某个方法需要访问事件但未设计为接收对其的引用作为参数,则此方法很有用。请注意,此方法应仅从应用程序的事件分派线程中调用。如果从另一个线程调用此方法,则将返回null。
      返回:
      当前正在分派的事件,如果在非事件分派线程上调用此方法,则返回null
      自:
      1.4
    • push

      public void push(EventQueue newEventQueue)
      用指定的EventQueue替换现有的EventQueue。任何待处理的事件都将传输到新的EventQueue中。
      参数:
      newEventQueue - 要使用的EventQueue(或其子类)实例
      抛出:
      NullPointerException - 如果newEventQueuenull
      自:
      1.2
      参见:
    • pop

      protected void pop() throws EmptyStackException
      停止使用此EventQueue分派事件。任何待处理的事件都将传输到以前的EventQueue中进行处理。

      警告:为避免死锁,请不要在子类中声明此方法为同步方法。

      抛出:
      EmptyStackException - 如果未对此EventQueue进行先前的推送
      自:
      1.2
      参见:
    • createSecondaryLoop

      public SecondaryLoop createSecondaryLoop()
      创建与此事件队列关联的新次级循环。使用SecondaryLoop.enter()SecondaryLoop.exit()方法启动和停止事件循环,并从此队列分派事件。
      返回:
      secondaryLoop 一个新的次级循环对象,可用于启动新的嵌套事件循环并从此队列分派事件
      自:
      1.7
      参见:
    • isDispatchThread

      public static boolean isDispatchThread()
      如果调用线程是当前AWT EventQueue的分派线程,则返回true。使用此方法确保特定任务是否正在(或不在)那里执行。

      注意:使用invokeLater(java.lang.Runnable)invokeAndWait(java.lang.Runnable)方法在当前AWT EventQueue的分派线程中执行任务。

      返回值:
      如果在当前AWT事件队列的调度线程中运行,则返回true
      自版本:
      1.2
      另请参阅:
    • invokeLater

      public static void invokeLater(Runnable runnable)
      使runnable调度线程中的系统事件队列中异步调用其run方法。这将在处理完所有待处理事件后发生。
      参数:
      runnable - 应在事件调度线程中的系统事件队列中异步执行其run方法的Runnable
      自版本:
      1.2
      另请参阅:
    • invokeAndWait

      public static void invokeAndWait(Runnable runnable) throws InterruptedException, InvocationTargetException
      使runnable调度线程中的系统事件队列中同步调用其run方法。这将在处理完所有待处理事件后发生。调用会阻塞,直到完成。如果从事件分发线程中调用此方法,将抛出错误。
      参数:
      runnable - 应在事件调度线程中的系统事件队列中同步执行其run方法的Runnable
      抛出:
      InterruptedException - 如果任何线程中断了此线程
      InvocationTargetException - 如果在运行runnable时抛出可抛出异常
      自版本:
      1.2
      另请参阅: