JavaTM 2 Platform
Standard Ed. 5.0

java.awt
类 EventQueue

java.lang.Object
  继承者 java.awt.EventQueue

public class EventQueue
extends Object

EventQueue 是一个与平台无关的类,它将来自于基础同位体类和受信任的应用程序类的事件列入队列。

它封装了异步事件指派机制,该机制从队列中提取事件,然后通过对此 EventQueue 调用 dispatchEvent(AWTEvent) 方法来指派这些事件(事件作为参数被指派)。该机制的特殊行为是与实现有关的。指派实际排入到该队列中的事件(注意,正在发送到 EventQueue 中的事件可以被合并)的惟一要求是:

按顺序。
也就是说,不允许同时从该队列中指派多个事件。
指派顺序与它们排队的顺序相同。
也就是说,如果 AWTEvent A 比 AWTEvent B 先排入到 EventQueue 中,那么事件 B 不能在事件 A 之前被指派。

一些浏览器将不同代码基中的 applet 分成独立的上下文,并在这些上下文之间建立一道道墙。在这样的场景中,每个上下文将会有一个 EventQueue。其他浏览器将所有的 applet 放入到同一个上下文中,这意味着所有 applet 只有一个全局 EventQueue。该行为是与实现有关的。有关更多信息,请参照浏览器的文档。

有关事件指派机制的线程问题,请参阅 AWT Threading Issues

从以下版本开始:
1.1

构造方法摘要
EventQueue()
           
 
方法摘要
protected  void dispatchEvent(AWTEvent event)
          指派一个事件。
static AWTEvent getCurrentEvent()
          返回当前正在被 EventQueue(它与正在调用的线程相关)指派的事件。
static long getMostRecentEventTime()
          返回最近事件的时间戳(如果有),该事件从 EventQueue(它与正在调用的线程相关)进行指派。
 AWTEvent getNextEvent()
          从 EventQueue 移除一个事件,并返回它。
static void invokeAndWait(Runnable runnable)
          导致 runnablerun 方法在 EventQueue 的指派线程上被调用。
static void invokeLater(Runnable runnable)
          导致 runnablerun 方法在 EventQueue 的指派线程上被调用。
static boolean isDispatchThread()
          如果正在调用的线程是当前 AWT EventQueue 的指派线程,则返回 true。
 AWTEvent peekEvent()
          返回 EventQueue 上的第一个事件,而不移除它。
 AWTEvent peekEvent(int id)
          返回指定 id(如果有) 的第一个事件。
protected  void pop()
          停止使用此 EventQueue 来指派事件。
 void postEvent(AWTEvent theEvent)
          将一个 1.1 样式的事件发送到 EventQueue 中。
 void push(EventQueue newEventQueue)
          用指定的事件队列替换现有的 EventQueue
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

EventQueue

public EventQueue()
方法详细信息

postEvent

public void postEvent(AWTEvent theEvent)
将一个 1.1 样式的事件发送到 EventQueue 中。如果在队列中存在一个具有相同 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()
其他 Component source.dispatchEvent(AWTEvent)
其他 MenuComponent source.dispatchEvent(AWTEvent)
其他 其他 无动作(忽略)

参数:
event - java.awt.AWTEvent 的一个实例或它的一个子类
抛出:
NullPointerException - 如果 eventnull

getMostRecentEventTime

public static long getMostRecentEventTime()
返回最近事件的时间戳(如果有),该事件从 EventQueue(它与正在调用的线程相关)进行指派。如果具有时间戳的事件当前正在被指派,则返回它的时间戳。如果还没有事件被指派,则返回 EventQueue 的初始化时间。在 JDK 的当前版本中,只有 InputEventActionEventInvocationEvent 有时间戳;但是,JDK 的未来版本可能将时间戳添加到其他事件类型中。注意,该方法只应该从应用程序事件的指派线程进行调用。如果该方法从另一个线程进行调用,则返回当前系统的时间(由 System.currentTimeMillis() 报告)。

返回:
最后一次 InputEvent 的时间戳,要指派的 ActionEventInvocationEvent,如果该方法在不同于事件指派线程的线程上调用,则返回 System.currentTimeMillis()
从以下版本开始:
1.4
另请参见:
InputEvent.getWhen(), ActionEvent.getWhen(), InvocationEvent.getWhen()

getCurrentEvent

public static AWTEvent getCurrentEvent()
返回当前正在被 EventQueue(它与正在调用的线程相关)指派的事件。只有方法需要访问事件时,该方法才有用,但是该方法并不接受对参数的引用。注意,该方法只应该从应用程序的事件指派线程进行调用。如果从另一个线程调用该方法,则返回 null。

返回:
当前正在被指派的事件;如果在线程上调用而不是在指派线程的事件上调用,则返回 null
从以下版本开始:
1.4

push

public void push(EventQueue newEventQueue)
用指定的事件队列替换现有的 EventQueue。任何挂起的事件都被传输到 EventQueue 以备处理。

参数:
newEventQueue - 要使用的 EventQueue(或其子类的) 的实例
抛出:
NullPointerException - 如果 newEventQueuenull
另请参见:
pop()

pop

protected void pop()
            throws EmptyStackException
停止使用此 EventQueue 来指派事件。任何挂起的事件都被传输到以前的 EventQueue 以备处理。

警告:为了避免死锁,不要在子类中将该方法声明为 synchronized。

抛出:
EmptyStackException - 如果以前没有对该 EventQueue 执行 push 操作
另请参见:
push(java.awt.EventQueue)

isDispatchThread

public static boolean isDispatchThread()
如果正在调用的线程是当前 AWT EventQueue 的指派线程,则返回 true。使用此调用确保给定的任务正在当前 AWT EventDispatchThread 上执行(或没有执行)。

返回:
如果给定的任务正在当前 AWT EventQueue 的指派线程上运行,则返回 true。

invokeLater

public static void invokeLater(Runnable runnable)
导致 runnablerun 方法在 EventQueue 的指派线程上被调用。在所有挂起事件被处理后才发生。

参数:
runnable - Runnable,其 run 方法应该在 EventQueue 上同步执行
从以下版本开始:
1.2
另请参见:
invokeAndWait(java.lang.Runnable)

invokeAndWait

public static void invokeAndWait(Runnable runnable)
                          throws InterruptedException,
                                 InvocationTargetException
导致 runnablerun 方法在 EventQueue 的指派线程上被调用。在所有挂起事件被处理后才发生。在这发生之前调用被阻塞。如果从事件指派线程进行调用,则该方法将抛出 Error。

参数:
runnable - Runnable,其 run 方法应该在 EventQueue 上同步执行
抛出:
InterruptedException - 如果另一个线程已经中断了该线程
InvocationTargetException - 如果运行 runnable 时抛出一个 throwable
从以下版本开始:
1.2
另请参见:
invokeLater(java.lang.Runnable)

JavaTM 2 Platform
Standard Ed. 5.0

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java 2 SDK SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策