- java.lang.Object
-
- java.awt.EventQueue
-
public class EventQueue extends Object
EventQueue是一个独立于平台的类,EventQueue来自底层对等类和受信任应用程序类的事件进行排队。它封装了从队列中提取事件,并通过调用调度它们异步事件指派机制
dispatchEvent(AWTEvent)这种方法EventQueue与该事件被分派作为参数。 该机器的特定行为取决于实现。 唯一的要求是实际排队到此队列的事件(请注意,可以合并发布到EventQueue事件):- 顺序。
- 也就是说,不允许同时调度来自此队列的多个事件。
- 按照他们入队的顺序排列。
-
也就是说,如果
AWTEventA在AWTEventB之前排队到EventQueue,那么事件B将不会在事件A之前被调度。
有些浏览器将不同代码库中的applet分成不同的上下文,并在这些上下文之间建立隔阂。 在这种情况下,每个上下文将有一个
EventQueue。 其他浏览器将所有applet放在同一个上下文中,这意味着所有applet只有一个全局的EventQueue。 此行为取决于实现。 有关更多信息,请参阅浏览器的文档。有关事件派遣机器的线程问题的信息,请参阅AWT Threading Issues 。
- 从以下版本开始:
- 1.1
-
-
构造方法摘要
构造方法 构造器 描述 EventQueue()初始化EventQueue的新实例。
-
方法摘要
所有方法 静态方法 实例方法 具体的方法 变量和类型 方法 描述 SecondaryLoopcreateSecondaryLoop()创建与此事件队列关联的新secondary loop。protected voiddispatchEvent(AWTEvent event)派遣活动。static AWTEventgetCurrentEvent()返回与调用线程关联的EventQueue当前正在调度的事件。static longgetMostRecentEventTime()返回具有时间戳的最新事件的时间戳,该时间戳是从与调用线程关联的EventQueue调度的。AWTEventgetNextEvent()从EventQueue删除事件并将其返回。static voidinvokeAndWait(Runnable runnable)static voidinvokeLater(Runnable runnable)static booleanisDispatchThread()如果调用线程是the current AWT EventQueue的调度线程,则返回true。AWTEventpeekEvent()返回EventQueue上的第一个事件而不删除它。AWTEventpeekEvent(int id)返回具有指定标识的第一个事件(如果有)。protected voidpop()使用此EventQueue停止分派事件。voidpostEvent(AWTEvent theEvent)将一个1.1风格的活动发布到EventQueue。voidpush(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中,只有InputEvents,ActionEvents和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()
-
-