我正在关注this Swing教程,我遇到了这段代码:
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
SimpleExample ex = new SimpleExample();
ex.setVisible(true);
}
});
EventQueue.invokeLater
参数中发生了什么?
答案 0 :(得分:2)
invokeLater
期望类型Runnable
的参数,即实现Runnable
接口的类的实例。在此示例中,此方法接收实现Runnable
的匿名类的实例。
Runnable
只有一个方法 - run
- 因此所有匿名类实例必须实现的是run
方法。
在Java 8中,使用lambda表达式的语法甚至更短:
EventQueue.invokeLater(
() -> {
SimpleExample ex = new SimpleExample();
ex.setVisible(true);
}
);
答案 1 :(得分:0)
invokeLater()
的参数必须是Runnable
,在这种情况下是anonymous inner class - 没有名称的类(在这种情况下)只创建了一个对象,明确地是Runnable
接口的新实现。这主要是用于允许遗留代码中的引用方法的Java hack。在新代码中,您可以在大多数情况下使用lambdas和method references,例如
EventQueue.invokeLater( () -> {
SimpleExample ex = new SimpleExample();
ex.setVisible(true);
} );
您提供的此特定代码只会在run()
EventQueue
时运行代码。