我正在阅读[Core Java Vol 1]第10版,第6章第6.3.6节中有一个代码片段,用于解释lambda表达式中的“变量范围”。我自己运行了该代码,但该代码刚刚终止立即,并且不会每两秒在控制台日志中显示“ Hello”。
我正在使用jdk1.8.0_202,这是我的代码:
git reset --merge
有人解释为什么这行不通吗?谢谢!
答案 0 :(得分:3)
这与lambda完全无关,而与没有Swing事件线程无关。您需要显示一个Swing GUI来运行事件线程。像JOptionPane这样简单的东西就可以工作。单独使用计时器并不能。
例如
import java.awt.Toolkit;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
public class Foo {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
repeatMessage("Hello", 2000);
JOptionPane.showMessageDialog(null, "foo"); // starts the thread
});
}
private static void repeatMessage(String text, int delay) {
ActionListener listener = event -> {
System.out.println(text);
Toolkit.getDefaultToolkit().beep();
};
new Timer(delay, listener).start();
}
}