EventQueue.invokeLater详解
2013-11-02 10:23
357 查看
因:什么是 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
中的事件可以被合并)的唯一要求是:
按顺序指派。也就是说,不允许同时从该队列中指派多个事件。指派顺序与它们排队的顺序相同。也就是说,如果
AWTEventA 比
AWTEventB 先排入到
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可以减少程序引入的类。
相关文章推荐
- Java中EventQueue.invokeLater干什么用的
- EventQueue.invokeLater(new Runnable())
- 使用eventqueue.invokelater()好处、原因
- EventQueue.invokeLater(new Runnable())
- 使用eventqueue.invokelater()好处、原因
- EventQueue.invokeLater
- Java中EventQueue.invokeLater干什么用的
- EventQueue.invokeLater(new Runnable())
- java.awt.EventQueue.invokeLater(new Runnable(){public void run(){}})(一)
- java.awt.EventQueue.invokeLater(new Runnable(){public void run(){}})(三)
- Java中EventQueue.invokeLater干什么用的
- java.awt.EventQueue.invokeLater(new Runnable(){public void run(){}})(二)
- EventQueue.invokeLater(new Runnable)
- 使用eventqueue.invokelater()好处、原因
- Java中为什么使用EventQueue.invokeLater
- 使用eventqueue.invokelater()好处、原因
- 关于为什么要加EventQueue.invokeAndWait的思考
- 多线程Event之详解
- 详解 ManualResetEvent
- jQuery动画高级用法——详解animation中的.queue()函数