- java.lang.Object
-
- java.awt.EventQueue
-
public class EventQueue extends Object
EventQueue
是一个独立于平台的类,EventQueue
来自底层对等类和受信任应用程序类的事件进行排队。它封装了从队列中提取事件,并通过调用调度它们异步事件指派机制
dispatchEvent(AWTEvent)
这种方法EventQueue
与该事件被分派作为参数。 该机器的特定行为取决于实现。 唯一的要求是实际排队到此队列的事件(请注意,可以合并发布到EventQueue
事件):- 顺序。
- 也就是说,不允许同时调度来自此队列的多个事件。
- 按照他们入队的顺序排列。
-
也就是说,如果
AWTEvent
A在AWTEvent
B之前排队到EventQueue
,那么事件B将不会在事件A之前被调度。
有些浏览器将不同代码库中的applet分成不同的上下文,并在这些上下文之间建立隔阂。 在这种情况下,每个上下文将有一个
EventQueue
。 其他浏览器将所有applet放在同一个上下文中,这意味着所有applet只有一个全局的EventQueue
。 此行为取决于实现。 有关更多信息,请参阅浏览器的文档。有关事件派遣机器的线程问题的信息,请参阅AWT Threading Issues 。
- 从以下版本开始:
- 1.1
-
-
构造方法摘要
构造方法 构造器 描述 EventQueue()
初始化EventQueue
的新实例。
-
方法摘要
所有方法 静态方法 实例方法 具体的方法 变量和类型 方法 描述 SecondaryLoop
createSecondaryLoop()
创建与此事件队列关联的新secondary loop
。protected void
dispatchEvent(AWTEvent event)
派遣活动。static AWTEvent
getCurrentEvent()
返回与调用线程关联的EventQueue
当前正在调度的事件。static long
getMostRecentEventTime()
返回具有时间戳的最新事件的时间戳,该时间戳是从与调用线程关联的EventQueue
调度的。AWTEvent
getNextEvent()
从EventQueue
删除事件并将其返回。static void
invokeAndWait(Runnable runnable)
static void
invokeLater(Runnable runnable)
static boolean
isDispatchThread()
如果调用线程是the current AWT EventQueue
的调度线程,则返回true。AWTEvent
peekEvent()
返回EventQueue
上的第一个事件而不删除它。AWTEvent
peekEvent(int id)
返回具有指定标识的第一个事件(如果有)。protected void
pop()
使用此EventQueue
停止分派事件。void
postEvent(AWTEvent theEvent)
将一个1.1风格的活动发布到EventQueue
。void
push(EventQueue newEventQueue)
用指定的替换现有的EventQueue
。
-
-
-
方法详细信息
-
postEvent
public void postEvent(AWTEvent theEvent)
将一个1.1风格的活动发布到EventQueue
。 如果队列中存在具有相同ID和事件源的现有事件,则将调用源Component
的coalesceEvents
方法。- 参数
-
theEvent
-实例java.awt.AWTEvent
,或它的子类 - 异常
-
NullPointerException
- 如果theEvent
是null
-
getNextEvent
public AWTEvent getNextEvent() throws InterruptedException
从EventQueue
删除事件并将其返回。 此方法将阻塞,直到另一个线程发布了一个事件。- 结果
-
接下来的
AWTEvent
- 异常
-
InterruptedException
- 如果有任何线程中断了该线程
-
peekEvent
public AWTEvent peekEvent()
返回EventQueue
上的第一个事件而不删除它。- 结果
- 第一个事件
-
peekEvent
public AWTEvent peekEvent(int id)
返回具有指定标识的第一个事件(如果有)。- 参数
-
id
- 所需事件类型的ID - 结果
-
如果没有这样的事件,则指定id的第一个事件或
null
-
dispatchEvent
protected void dispatchEvent(AWTEvent event)
派遣活动。 调度事件的方式取决于事件的类型和事件源对象的类型: Event types, source types, and dispatch methods Event Type Source Type Dispatched To ActiveEvent Any event.dispatch() Other Component source.dispatchEvent(AWTEvent) Other MenuComponent source.dispatchEvent(AWTEvent) Other Other No action (ignored)- 参数
-
event
-实例java.awt.AWTEvent
,或它的子类 - 异常
-
NullPointerException
- 如果event
是null
- 从以下版本开始:
- 1.2
-
getMostRecentEventTime
public static long getMostRecentEventTime()
返回具有时间戳的最新事件的时间戳,该时间戳是从与调用线程关联的EventQueue
分派的。 如果当前正在调度具有时间戳的事件,则将返回其时间戳。 如果尚未调度任何事件,则将返回EventQueue的初始化时间。在当前版本的JDK中,只有InputEvent
s,ActionEvent
s和InvocationEvent
具有时间戳; 但是,JDK的未来版本可能会将时间戳添加到其他事件类型。 请注意,只应从应用程序的event dispatching thread
调用此方法。 如果从另一个线程调用此方法,则将返回当前系统时间(由System.currentTimeMillis()
报告)。- 结果
-
的时间戳最后
InputEvent
,ActionEvent
,或InvocationEvent
被分派,或System.currentTimeMillis()
如果该方法在不同于事件指派线程的线程上调用 - 从以下版本开始:
- 1.4
- 另请参见:
-
InputEvent.getWhen()
,ActionEvent.getWhen()
,InvocationEvent.getWhen()
,isDispatchThread()
-
getCurrentEvent
public static AWTEvent getCurrentEvent()
返回与调用线程关联的EventQueue
当前正在调度的事件。 如果方法需要访问事件,但这不是设计为接收对它的引用作为参数,这将非常有用。 请注意,只应从应用程序的事件派发线程调用此方法。 如果从另一个线程调用此方法,则返回null。- 结果
- 当前正在调度的事件,如果在事件调度线程以外的线程上调用此方法,则返回null
- 从以下版本开始:
- 1.4
-
push
public void push(EventQueue newEventQueue)
用指定的替换现有的EventQueue
。 任何待处理事件都将传输到新的EventQueue
以供其处理。- 参数
-
newEventQueue
- 要使用的EventQueue
(或其子类)实例 - 异常
-
NullPointerException
- 如果newEventQueue
是null
- 从以下版本开始:
- 1.2
- 另请参见:
-
pop()
-
pop
protected void pop() throws EmptyStackException
使用此EventQueue
停止分派事件。 任何待处理事件都将传输到先前的EventQueue
进行处理。警告:为避免死锁,请不要在子类中声明此方法已同步。
- 异常
-
EmptyStackException
- 如果之前没有对此EventQueue
- 从以下版本开始:
- 1.2
- 另请参见:
-
push(java.awt.EventQueue)
-
createSecondaryLoop
public SecondaryLoop createSecondaryLoop()
创建与此事件队列关联的新secondary loop
。 使用SecondaryLoop.enter()
和SecondaryLoop.exit()
方法启动和停止事件循环并从此队列调度事件。- 结果
- secondaryLoop一个新的辅助循环对象,可用于启动新的嵌套事件循环并从此队列调度事件
- 从以下版本开始:
- 1.7
- 另请参见:
-
SecondaryLoop.enter()
,SecondaryLoop.exit()
-
isDispatchThread
public static boolean isDispatchThread()
如果调用线程是the current AWT EventQueue
的调度线程,则返回true。 使用此方法可确保正在执行(或不执行)特定任务。注意:使用
invokeLater(java.lang.Runnable)
或invokeAndWait(java.lang.Runnable)
方法在the current AWT EventQueue
的调度线程中执行任务。- 结果
-
如果在
the current AWT EventQueue
的调度线程中运行, 则为 true - 从以下版本开始:
- 1.2
- 另请参见:
-
invokeLater(java.lang.Runnable)
,invokeAndWait(java.lang.Runnable)
,Toolkit.getSystemEventQueue()
-
invokeLater
public static void invokeLater(Runnable runnable)
导致runnable
在46405049957588的the system EventQueue
中调用其run
方法。 这将在处理完所有待处理事件后发生。- 参数
-
runnable
-Runnable
的run
方法应该在event dispatch thread
的the system EventQueue
中异步执行 - 从以下版本开始:
- 1.2
- 另请参见:
-
invokeAndWait(java.lang.Runnable)
,Toolkit.getSystemEventQueue()
,isDispatchThread()
-
invokeAndWait
public static void invokeAndWait(Runnable runnable) throws InterruptedException, InvocationTargetException
导致runnable
在dispatch thread
的dispatch thread
中调用其run
方法。 这将在处理完所有待处理事件后发生。 呼叫阻止,直到发生这种情况。 如果从event dispatcher thread
调用此方法将抛出Error。- 参数
-
runnable
-Runnable
其run
方法应在event dispatch thread
的the system EventQueue
中同步执行 - 异常
-
InterruptedException
- 如果有任何线程中断了该线程 -
InvocationTargetException
- 如果在运行runnable
时抛出throwable - 从以下版本开始:
- 1.2
- 另请参见:
-
invokeLater(java.lang.Runnable)
,Toolkit.getSystemEventQueue()
,isDispatchThread()
-
-