public class EventQueue extends Object
EventQueue
是一个独立于平台的类,用于从底层对等类和可信应用程序类排队事件。
它封装了从队列中提取事件,并通过调用调度它们异步事件指派机制dispatchEvent(AWTEvent)
这种方法EventQueue
与该事件被分派作为参数。 这种机器的特殊行为是依赖于实现的。 唯一的要求是实际排队到这个队列的事件(注意,发布到EventQueue
事件可以合并)被调度:
AWTEvent
A在AWTEvent
B之前排队到EventQueue
,则事件B将不会在事件A之前调度。
一些浏览器将不同代码库中的小程序分割成单独的上下文,并在这些上下文之间建立墙壁。 在这种情况下,每个上下文将有一个EventQueue
。 其他浏览器将所有小程序放置在相同的上下文中,这意味着所有applet将只有一个全局EventQueue
。 这种行为是依赖于实现的。 有关更多信息,请参阅浏览器的文档。
有关事件调度机制的线程问题的信息,请参见AWT Threading Issues 。
Constructor and Description |
---|
EventQueue() |
Modifier and Type | Method and Description |
---|---|
SecondaryLoop |
createSecondaryLoop()
创建与此事件队列
secondary loop 联的新的
secondary loop 。
|
protected void |
dispatchEvent(AWTEvent event)
调度事件。
|
static AWTEvent |
getCurrentEvent()
返回与调用线程
EventQueue 联的EventQueue当前调度的事件。
|
static long |
getMostRecentEventTime()
返回具有时间戳的最新事件的时间戳,并从与调用线程
EventQueue 联的
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)
返回具有指定ID的第一个事件(如果有)。
|
protected void |
pop()
使用此
EventQueue 停止调度事件。
|
void |
postEvent(AWTEvent theEvent)
发布一个1.1风格的事件到
EventQueue 。
|
void |
push(EventQueue newEventQueue)
替换现有
EventQueue 与指定的一个。
|
public void postEvent(AWTEvent theEvent)
EventQueue
。
如果具有相同ID和事件源的队列上存在现有事件,则将调用源Component
的coalesceEvents
方法。
theEvent
-实例
java.awt.AWTEvent
,或它的子类
NullPointerException
- 如果
theEvent
是
null
public AWTEvent getNextEvent() throws InterruptedException
EventQueue
中删除一个事件并返回。
此方法将阻止,直到事件已被另一个线程发布。
AWTEvent
InterruptedException
- 如果任何线程已经中断了这个线程
public AWTEvent peekEvent()
EventQueue
上的第一个事件,而不删除它。
public AWTEvent peekEvent(int id)
id
- 所需事件类型的id
null
如果没有这样的事件
protected void dispatchEvent(AWTEvent event)
event
-实例
java.awt.AWTEvent
,或它的子类
NullPointerException
- 如果
event
是
null
public static long getMostRecentEventTime()
EventQueue
联的EventQueue
分派。
如果当前正在调度具有时间戳的事件,则会返回其时间戳。
如果没有发送任何事件,则将返回EventQueue的初始化时间。在当前版本的JDK中,只有InputEvent
s, ActionEvent
s和InvocationEvent
具有时间戳;
然而,JDK的未来版本可能会向其他事件类型添加时间戳。
请注意,此方法只能从应用程序的event dispatching thread
调用。
如果从另一个线程调用此方法,则将返回当前系统时间(由System.currentTimeMillis()
报告)。
InputEvent
,
ActionEvent
,或
InvocationEvent
被分派,或
System.currentTimeMillis()
如果该方法在不同于事件指派线程的线程上调用
InputEvent.getWhen()
,
ActionEvent.getWhen()
,
InvocationEvent.getWhen()
,
isDispatchThread()
public static AWTEvent getCurrentEvent()
EventQueue
联的EventQueue当前调度的事件。
如果一个方法需要对该事件的访问,但是这个方法没有被设计为接受对它的引用作为参数,这是有用的。
请注意,此方法只能从应用程序的事件调度线程调用。
如果从另一个线程调用此方法,则返回null。
public void push(EventQueue newEventQueue)
EventQueue
与指定的一个。
任何待处理的事件都将传输到新的EventQueue
进行处理。
newEventQueue
- 要使用的
EventQueue
(或其子类)实例
NullPointerException
- 如果
newEventQueue
是
null
pop()
protected void pop() throws EmptyStackException
EventQueue
。
任何待处理的事件都将转移到先前的EventQueue
进行处理。
警告:为避免死锁,请勿在子类中声明此方法同步。
EmptyStackException
- 如果以前没有推出这个
EventQueue
push(java.awt.EventQueue)
public SecondaryLoop createSecondaryLoop()
secondary loop
联的新的secondary loop
。
使用SecondaryLoop.enter()
和SecondaryLoop.exit()
方法来启动和停止事件循环并从此队列调度事件。
SecondaryLoop.enter()
,
SecondaryLoop.exit()
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
invokeLater(java.lang.Runnable)
,
invokeAndWait(java.lang.Runnable)
,
Toolkit.getSystemEventQueue()
public static void invokeLater(Runnable runnable)
runnable
的run
方法在dispatch thread
的the system EventQueue
中被调用。
这将在所有待处理的事件被处理之后发生。
runnable
-
Runnable
其
run
方法应该在88380062184298的
event dispatch thread
中
异步执行
invokeAndWait(java.lang.Runnable)
,
Toolkit.getSystemEventQueue()
,
isDispatchThread()
public static void invokeAndWait(Runnable runnable) throws InterruptedException, InvocationTargetException
runnable
在dispatch thread
的dispatch thread
中调用其run
方法。
这将在所有待处理的事件被处理之后发生。
调用块直到发生这种情况。
如果从event dispatcher thread
调用,此方法将抛出错误。
runnable
-
Runnable
其
run
方法应在
event dispatch thread
the system EventQueue
中
同步执行
InterruptedException
- 如果有任何线程已经中断了这个线程
InvocationTargetException
- 如果在运行
runnable
时抛出一个
runnable
invokeLater(java.lang.Runnable)
,
Toolkit.getSystemEventQueue()
,
isDispatchThread()