【发布时间】:2017-11-23 18:10:20
【问题描述】:
我了解 EventQueue.invokeLater() 是一个调用函数以使 Java Swing 组件线程安全。 另外,我知道这个函数的参数是一个带有实现 Runnable 的对象。 但是,我无法理解此函数调用的语法,即此调用 -
EventQueue.invokeLater(()-> {
new Screen();
});
这里,Screen() 是一个扩展 JFrame 的类。
public class Screen extends JFrame
{
Screen()
{
setSize(1000, 1000);
JPanel j1 = new Board();
j1.setBounds(0,0,500, 500);
JPanel j2 = new DiceModel();
j2.setBounds(500, 0, 500, 500);
add(j1);
add(j2);
setLayout(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args)
{
EventQueue.invokeLater(()-> {
new Screen();
});
}
}
此代码按预期运行。 Board 和 DiceModel 是我定义的两个扩展 JPanel 的类。
调用
EventQueue.invokeLater( new Screen() );
给出 Screen 不是 Runnable 类型的对象的预期错误。
所以,我的问题是,invokeLater() 函数调用的语法是什么意思? 它是Java中的一种匿名函数调用吗?
【问题讨论】:
-
这是一个 lambda 函数。问题可能重复,但我找不到目标。
-
非常感谢!我正在寻找这样的帖子,但找不到。所以我自己问了这个问题。我现在将查找 lambda 函数。
-
从 java 8 开始,您可以使用 lambda 表达式用一种方法创建接口对象。接口
Runnable有一个方法run,所以它是函数接口,可以用作lambda表达式 -
非常感谢! @JaySmith
-
@julianff: 你可以answer your own question.
标签: java multithreading swing awt