您的位置:首页 > 产品设计 > UI/UE

EventQueue.invokeLater

2014-11-21 10:24 1186 查看


因:什么是 EventQueue.invokeLater,需要用吗?

EventQueue.invokeLater(new Runnable(){
public void run(){
try{*/
MyAbout frame =new MyAbout();
frame.setVisible(true);
}catch(Exception e){
e.printStackTrace();
}
}
});

========================================================================

API中:


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
。该行为是与实现有关的。有关更多信息,请参照浏览器的文档。


invokeLater

public static void invokeLater(Runnable runnable)


导致
runnable
run
方法在
the system EventQueue
的指派线程中被调用。
参数:
runnable
-
Runnable
对象,其
run
方法应该在
EventQueue
上同步执行从以下版本开始:1.2另请参见:
invokeAndWait(java.lang.Runnable)


========================================================================

七嘴八舌:

使用该方式的原因是:awt是单线程模式的,所有awt的组件只能在(推荐方式)事件处理线程中访问,从而保证组件状态的可确定性。

---------------------------------------------------------------------------------------


使用eventqueue.invokelater()好处是显而易见的,这个方法调用完毕后,它会被销毁,因为匿名内部类是作为临时变量存在的,给它分配的内存在此时会被释放。这个对于只需要在一个地方使用时可以节省内存,而且这个类是不可以被其它的方法或类使用的,只能被EventQueue.invokeLater()来使用。但如果你需要一个在很多地方都能用到的类,而不是只在某一个类里面或者方法里用的话,定义成匿名内部类显然是不可取的。是,runnable是跟线程相关的类。

swingutilities.invokelater()和eventqueue.invokelater(),后者可以不干扰到事件分发线程.SwingUtilities版只是一个薄薄的封装方法,它直接转而调用EventQueue.invokeLater。因为Swing框架本身经常调用SwingUtilities,使用SwingUtilities可以减少程序引入的类。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: