解释下面的代码是做什么的?

Dee*_*pak 15 java concurrency swing runnable

java.awt.EventQueue.invokeLater(new Runnable() {
    public void run() {
        new NewJFrame().setVisible(true);
    }
});
Run Code Online (Sandbox Code Playgroud)

请告诉我上面代码实际上做了什么.我正在寻找逐行解释.特别是第一行并告诉我为什么我们使用它,在什么情况下我们必须使用它.

yan*_*kee 27

在此示例中,您将看到从Runnable派生的任何类.这个匿名类重写了runnable接口的run方法.然后实例化此匿名类并将其传递给EventQueue.invokeLater方法,该方法是一种静态方法.此方法将对象追加到...... well ... eventQueue.在EvenQueue中有很多事件,比如键盘事件或鼠标事件或其他什么.有一个Thread继续轮询来自此队列的数据.一旦该线程到达此处实例化的匿名类,它将执行run()方法,该方法将实例化类NewJFrame的Object并将其设置为可见.

执行此操作的重点是复杂的是新的JFrame().setVisible(true)部分不在主线程中执行,而是在事件调度线程中执行.在Swing中,您必须执行在事件调度线程中修改用户界面的所有代码.