java.lang.Object
java.awt.EventQueue
EventQueue是一个平台无关的类,用于排队事件,既可以来自底层对等类,也可以来自受信任的应用程序类。
它封装了异步事件分发机制,该机制从队列中提取事件,并通过调用此EventQueue上的dispatchEvent(AWTEvent)方法来分派它们,事件作为参数传递。此机制的特定行为取决于实现。唯一的要求是实际排入此队列的事件(请注意,发布到EventQueue的事件可以合并)被分派:
- 顺序地。
- 也就是说,不允许同时分派此队列中的多个事件。
- 以排入的顺序相同。
-
也就是说,如果
AWTEventA在AWTEventB之前排入EventQueue,则事件B将在事件A之前不会被分派。
某些浏览器将不同代码库中的小程序分隔成不同的上下文,并在这些上下文之间建立墙壁。在这种情况下,每个上下文将有一个EventQueue。其他浏览器将所有小程序放入同一个上下文中,这意味着所有小程序将只有一个全局EventQueue。此行为取决于实现。请查阅您浏览器的文档以获取更多信息。
有关事件分发机制的线程问题的信息,请参阅AWT线程问题。
- 自:
- 1.1
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescription创建与此事件队列关联的新次级循环。protected voiddispatchEvent(AWTEvent event) 分派一个事件。static AWTEvent返回由调用线程关联的EventQueue当前正在分派的事件。static long返回与调用线程关联的EventQueue从队列中分派的最近具有时间戳的事件的时间戳。从EventQueue中移除一个事件并返回它。static voidinvokeAndWait(Runnable runnable) static voidinvokeLater(Runnable runnable) static boolean如果调用线程是当前AWT EventQueue的分派线程,则返回true。返回EventQueue上的第一个事件,但不移除它。peekEvent(int id) 返回具有指定id的第一个事件(如果有)。protected voidpop()停止使用此EventQueue分派事件。void向EventQueue发布一个1.1风格的事件。voidpush(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
- 另请参阅:
-