java.awt 类 EventQueue|| Java之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)
导致 runnable 的 run 方法在 EventQueue 的指派线程上被调用。

static void

invokeLater(Runnable runnable)
导致 runnable 的 run 方法在 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 继承的方法

cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

构造方法详细信息

EventQueue

public 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

返回:

指定 id 的第一个事件,如果没有这样的事件,则返回 null


dispatchEvent

protected void dispatchEvent(AWTEvent event)

指派一个事件。指派事件的方式取决于事件的类型和事件的源对象的类型:

事件类型

源类型

指派

ActiveEvent

所有

event.dispatch()

其他

Component

source.dispatchEvent(AWTEvent)

其他

MenuComponent

source.dispatchEvent(AWTEvent)

其他

其他

无动作(忽略)

参数:

event – java.awt.AWTEvent 的一个实例或它的一个子类

抛出:

NullPointerException – 如果 event 为 null


getMostRecentEventTime

public static long getMostRecentEventTime()

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

返回:

最后一次 InputEvent 的时间戳,要指派的 ActionEvent 或 InvocationEvent,如果该方法在不同于事件指派线程的线程上调用,则返回 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 – 如果 newEventQueue 为 null

另请参见:

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)

导致 runnable 的 run 方法在 EventQueue 的指派线程上被调用。在所有挂起事件被处理后才发生。

参数:

runnable – Runnable,其 run 方法应该在 EventQueue 上同步执行

从以下版本开始:

1.2

另请参见:

invokeAndWait(java.lang.Runnable)


invokeAndWait

public static void invokeAndWait(Runnable runnable)

                          throws InterruptedException,

                                 InvocationTargetException

导致 runnable 的 run 方法在 EventQueue 的指派线程上被调用。在所有挂起事件被处理后才发生。在这发生之前调用被阻塞。如果从事件指派线程进行调用,则该方法将抛出 Error。

参数:

runnable – Runnable,其 run 方法应该在 EventQueue 上同步执行

抛出:

InterruptedException – 如果另一个线程已经中断了该线程

InvocationTargetException – 如果运行 runnable 时抛出一个 throwable

从以下版本开始:

1.2

另请参见:

invokeLater(java.lang.Runnable)

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注