我尝试为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 -version java版" 1.8.0_45" Java(TM)SE运行时环境(版本1.8.0_45-b14) Java HotSpot(TM)客户端VM(版本25.45-b02,混合模式)
所以,据我所知,它有一个与lambda表达兼容的版本,但没有成功使它们起作用,任何想法或建议他会发生什么?
编辑: 当我尝试编译时,我得到了这个:
Prueba.java:57: error: illegal start of expression
boton.addActionListener(event -> System.out.println("Hello World !"));
^1 error
EDIT2: 我没有使用任何IDE,我从命令行编译
答案 0 :(得分:9)
修改强>
根据您的意见,您没有使用任何IDE,而您的javac
版本是1.7。您需要使用java 8进行编译,否则将无法识别lambda。
我会将此部分保留在我的答案中,因为它可能会解决其他人的问题,即使在这种情况下这不是解决方案。
你的lambda非常好。该错误可能是由于编译器合规性级别设置错误。
如果您使用eclipse,请参阅此文章以了解如何更改编译器合规性级别:
How to change JDK version for an Eclipse project
如果您使用Netbeans,请记住(这是许多人忘记的事情),如果您希望它正常运行,您必须将source
和libraries
目标设置为8。
<强>来源
<强>库强>
从命令行调用java -version
并不意味着在IDE中设置了正确的库,因此您必须验证这一点。
如果您使用任何其他IDE,请google “如何更改YourIDE上的jdk版本”。
答案 1 :(得分:5)
如果您有任何机会使用intellij,请确保项目语言级别设置为8 - Lambdas ..
答案 2 :(得分:2)
boton.addActionListener(event - &gt; System.out.println(“Hello World!”)); - Lambda Expression非常好。您正在将事件传递给ActionLerner函数接口的actionPerformed方法,该方法将在使用java 8编译器编译代码时进行映射。
请检查您的java版本。