java.lang.Object
java.awt.EventQueue
EventQueue
是一个平台无关的类,用于排队事件,既可以来自底层对等类,也可以来自受信任的应用程序类。
它封装了异步事件分发机制,该机制从队列中提取事件,并通过调用此EventQueue
上的dispatchEvent(AWTEvent)
方法来分派它们,事件作为参数传递。此机制的特定行为取决于实现。唯一的要求是实际排入此队列的事件(请注意,发布到EventQueue
的事件可以合并)被分派:
- 顺序地。
- 也就是说,不允许同时分派此队列中的多个事件。
- 以排入的顺序相同。
-
也就是说,如果
AWTEvent
A在AWTEvent
B之前排入EventQueue
,则事件B将在事件A之前不会被分派。
某些浏览器将不同代码库中的小程序分隔成不同的上下文,并在这些上下文之间建立墙壁。在这种情况下,每个上下文将有一个EventQueue
。其他浏览器将所有小程序放入同一个上下文中,这意味着所有小程序将只有一个全局EventQueue
。此行为取决于实现。请查阅您浏览器的文档以获取更多信息。
有关事件分发机制的线程问题的信息,请参阅AWT线程问题。
- 自:
- 1.1
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescription创建与此事件队列关联的新次级循环
。protected void
dispatchEvent
(AWTEvent event) 分派一个事件。static AWTEvent
返回由调用线程关联的EventQueue
当前正在分派的事件。static long
返回与调用线程关联的EventQueue
从队列中分派的最近具有时间戳的事件的时间戳。从EventQueue
中移除一个事件并返回它。static void
invokeAndWait
(Runnable runnable) static void
invokeLater
(Runnable runnable) static boolean
如果调用线程是当前AWT EventQueue
的分派线程,则返回true。返回EventQueue
上的第一个事件,但不移除它。peekEvent
(int id) 返回具有指定id的第一个事件(如果有)。protected void
pop()
停止使用此EventQueue
分派事件。void
向EventQueue
发布一个1.1风格的事件。void
push
(EventQueue newEventQueue) 用指定的EventQueue
替换现有的EventQueue
。
-
Constructor Details
-
EventQueue
public EventQueue()初始化一个新的EventQueue
实例。
-
-
Method Details
-
postEvent
向EventQueue
发布一个1.1风格的事件。如果队列中已存在具有相同ID和事件源的事件,则将调用源Component
的coalesceEvents
方法。- 参数:
-
theEvent
-java.awt.AWTEvent
的实例,或其子类 - 抛出:
-
NullPointerException
- 如果theEvent
为null
-
getNextEvent
从EventQueue
中移除一个事件并返回它。此方法将阻塞,直到另一个线程发布了一个事件。- 返回:
-
下一个
AWTEvent
- 抛出:
-
InterruptedException
- 如果任何线程中断了此线程
-
peekEvent
返回EventQueue
上的第一个事件,但不移除它。- 返回:
- 第一个事件
-
peekEvent
返回具有指定id的第一个事件(如果有)。- 参数:
-
id
- 所需事件类型的id - 返回:
-
指定id的第一个事件,如果没有这样的事件,则返回
null
-
dispatchEvent
分派一个事件。事件的分派方式取决于事件的类型和事件的源对象的类型:事件类型、源类型和分派方法 事件类型 源类型 分派至 ActiveEvent 任何 event.dispatch() Other Component source.dispatchEvent(AWTEvent) Other MenuComponent source.dispatchEvent(AWTEvent) Other Other 无操作(被忽略) - 参数:
-
event
-java.awt.AWTEvent
的实例,或其子类 - 抛出:
-
NullPointerException
- 如果event
为null
- 自:
- 1.2
-
getMostRecentEventTime
public static long getMostRecentEventTime()返回与调用线程关联的EventQueue
从队列中分派的最近具有时间戳的事件的时间戳。如果当前正在分派带有时间戳的事件,则将返回其时间戳。如果尚未分派任何事件,则将返回EventQueue的初始化时间。在当前版本的JDK中,只有InputEvent
、ActionEvent
和InvocationEvent
具有时间戳;但是,将来的JDK版本可能会向其他事件类型添加时间戳。请注意,此方法应仅从应用程序的事件分派线程
中调用。如果从另一个线程调用此方法,则将返回当前系统时间(由System.currentTimeMillis()
报告)。- 返回:
-
最后一个被分派的
InputEvent
、ActionEvent
或InvocationEvent
的时间戳,或如果在非事件分派线程上调用此方法,则返回System.currentTimeMillis()
- 自:
- 1.4
- 参见:
-
getCurrentEvent
返回由调用线程关联的EventQueue
当前正在分派的事件。如果某个方法需要访问事件但未设计为接收对其的引用作为参数,则此方法很有用。请注意,此方法应仅从应用程序的事件分派线程中调用。如果从另一个线程调用此方法,则将返回null。- 返回:
- 当前正在分派的事件,如果在非事件分派线程上调用此方法,则返回null
- 自:
- 1.4
-
push
用指定的EventQueue
替换现有的EventQueue
。任何待处理的事件都将传输到新的EventQueue
中。- 参数:
-
newEventQueue
- 要使用的EventQueue
(或其子类)实例 - 抛出:
-
NullPointerException
- 如果newEventQueue
为null
- 自:
- 1.2
- 参见:
-
pop
停止使用此EventQueue
分派事件。任何待处理的事件都将传输到以前的EventQueue
中进行处理。警告:为避免死锁,请不要在子类中声明此方法为同步方法。
- 抛出:
-
EmptyStackException
- 如果未对此EventQueue
进行先前的推送 - 自:
- 1.2
- 参见:
-
createSecondaryLoop
- 返回:
- 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
-
invokeAndWait
public static void invokeAndWait(Runnable runnable) throws InterruptedException, InvocationTargetException - 参数:
-
runnable
- 应在事件调度线程
中的系统事件队列
中同步执行其run
方法的Runnable
- 抛出:
-
InterruptedException
- 如果任何线程中断了此线程 -
InvocationTargetException
- 如果在运行runnable
时抛出可抛出异常 - 自版本:
- 1.2
- 另请参阅:
-