【发布时间】:2015-06-21 15:59:38
【问题描述】:
我正在尝试为 ActionListener 制作一个 lambda 表达式,但它给了我一个 IllegalStart 表达式,到目前为止我尝试运行的内容如下所示:
JFrame frame = new JFrame();
JButton boton = new JButton("Lambda Button");
boton.addActionListener(event -> System.out.println("Hello World!"));
frame.add(boton);
frame.setVisible(true);
另一方面,当我改用此代码时:
JFrame frame = new JFrame();
JButton boton = new JButton("Lambda Button");
boton.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent e)
{
System.out.println("Hello World!");
}
} );
frame.add(boton);
frame.setVisible(true);
效果很好,
最初我认为问题可能是我正在运行的 java 版本,但我刚刚更新并继续做同样的事情,当我执行 java -version 时,我给了我以下信息:
java -版本 java版本“1.8.0_45” Java(TM) SE 运行时环境 (build 1.8.0_45-b14) Java HotSpot(TM) 客户端虚拟机(build 25.45-b02,混合模式)
所以,据我所知,它有一个与 lambda 表达式兼容的版本,但没有成功地让它们工作,有什么想法或建议他会发生什么?
编辑: 当我尝试编译时,我得到了这个:
Prueba.java:57: error: illegal start of expression
boton.addActionListener(event -> System.out.println("Hello World !"));
^1 error
编辑2: 我没有使用任何IDE,我是从命令行编译的
【问题讨论】:
-
您使用的是什么 IDE?您确定您项目的 JDK 定义为 Java 8 JDK home 吗?
-
在您的 IDE 中,您是否将代码编译为 1.8? (在 Eclipse 中:项目属性 > java 编译器 > JDK 合规性)。无论您使用哪个 JRE 运行它,您仍然需要将其编译为 1.8。
-
@user4792574 您从与
java -version相同的终端运行命令行? -
另外,验证“事件”不是已定义的局部变量或当前方法参数的名称。 Lambda 参数名称在与其封闭环境相同的范围内定义。
-
@OlivierCroisier 错误将是“变量事件已定义”。