zoukankan      html  css  js  c++  java
  • Java Swing中有关事件机制

    看到过两种方式启动主窗体的代码:

    方式1:

            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new MainJFrame().setVisible(true);
                }
            });

    方式2

            javax.swing.SwingUtilities.invokeLater(new Runnable() {
    			@Override
    			public void run() {
    				new MainJFrame().setVisible(true);
    			}
    		});
    

    SwingUtilities.invokeLater和EventQueue.invokeLater实际上是一样的。SwingUtilities.invokeLater实际上是调用EventQueue.invokeLater。

    JDK源码

        public static void invokeLater(Runnable doRun) {
            EventQueue.invokeLater(doRun);
        }
    

    SwingUtilities.invokeLater的Javadoc有这样的一段说明:


    Open Declaration void javax.swing.SwingUtilities.invokeLater(Runnable doRun)

    Causes doRun.run() to be executed asynchronously on the AWT event dispatching thread(就是EDT). This will happen after all pending AWT events have been processed. This method should be used when an application thread needs to update the GUI. In the following example the invokeLater call queues the Runnable object doHelloWorld on the event dispatching thread and then prints a message.

    Runnable doHelloWorld = new Runnable() {
      public void run() {
        System.out.println("Hello World on " + Thread.currentThread());
      }
    };
    
    SwingUtilities.invokeLater(doHelloWorld);
    System.out.println("This might well be displayed before the other message.");

    If invokeLater is called from the event dispatching thread -- for example, from a JButton's ActionListener -- the doRun.run() will still be deferred until all pending events have been processed. Note that if the doRun.run() throws an uncaught exception the event dispatching thread will unwind (not the current thread).
    Additional documentation and examples for this method can be found in Concurrency in Swing.

    As of 1.3 this method is just a cover for java.awt.EventQueue.invokeLater().

    Unlike the rest of Swing, this method can be invoked from any thread.
    Parameters:doRun See Also:invokeAndWait

     Event Dispatching Thread就是常说的EDT,事件派发线程

    关于事件分发的机制,参看下面的文章,讲的还是比较全面的。

    http://blog.itpub.net/13685345/viewspace-374940/

     http://blog.csdn.net/vking_wang/article/details/8992463

  • 相关阅读:
    Visual Studio 2008 可扩展性开发(一):VS概览
    CButtonST使用技巧: CButtonST简介
    Doxygen + Graphviz + Htmlhelp, 成为文档好手
    Django的多数据库处理(垂直分库和水平分库)
    赫曼米勒中国| 设计,让世界更美好。
    maccman/juggernaut
    aptget y install buildessential
    QT分析之WebKit(三)
    Django的多数据库支持,太酷了~
    我们的征途是星辰大海#
  • 原文地址:https://www.cnblogs.com/xiaozu/p/4498803.html
Copyright © 2011-2022 走看看