2014-12-06 114 views
0

我下面this Swing指南,我碰到这个代码片段跑:我需要帮助理解这个java代码

EventQueue.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      SimpleExample ex = new SimpleExample(); 
      ex.setVisible(true); 
     } 
    }); 

什么的EventQueue.invokeLater PARAMS里面发生了什么?

+0

阅读有关匿名课程。 https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html – 2014-12-06 13:48:11

+0

它是Runnable类的匿名实现。 – 2014-12-06 13:49:30

+1

http://stackoverflow.com/questions/22534356/java-awt-eventqueue-invokelater-explained可能是有用的 – Kennet 2014-12-06 13:51:58

回答

2

invokeLater需要参数类型Runnable,即实现Runnable接口的类的实例。在此示例中,此方法接收实现Runnable的匿名类的实例。

Runnable只有一个方法 - run - 所以所有的匿名类实例必须执行的是run方法。

在Java 8,有一个更短的语法,使用lambda表达式:

EventQueue.invokeLater(
    () -> { 
     SimpleExample ex = new SimpleExample(); 
     ex.setVisible(true); 
    } 
); 
+0

哇,这很酷。我会在10分钟内接受我的请求,谢谢。 – 2014-12-06 13:51:51

0

invokeLater()的参数必须要实现Runnable,在这种情况下是一个anonymous inner class - 一个没有名称的类并且(在这种情况下)只创建一个对象,明确地指定Runnable接口的新实现。这主要是用于允许遗留代码中引用方法的Java hack。在新代码中,您可以在大多数情况下使用lambdasmethod references

EventQueue.invokeLater(() -> { 
     SimpleExample ex = new SimpleExample(); 
     ex.setVisible(true); 
}); 

您提出将刚刚从EventQueue运行run()的代码时,它的时间这个特殊的代码。