【发布时间】:2012-06-25 23:26:21
【问题描述】:
我有一台运行 Windows XP SP3 32 位的虚拟机。在这台机器上 我从here 安装了 Java SE JDK 8 build b44 Developer Preview。
我还安装了 JavaFX 2.1 SDK。
效果很好:
java -version
> java version "1.8.0-ea"
> Java(TM) SE Runtime Environment (build 1.8.0-ea-b44)
> Java HotSpot(TM) Client VM (build 24.0-b14, mixed mode, sharing)
我尝试运行以下程序(取自here):
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.ButtonBase;
import javafx.scene.control.ToggleButton;
import javafx.scene.control.ToggleButtonBuilder;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class LambdasWithJavaFx extends Application
{
public static void main(String[] args)
{
Application.launch(args);
}
@Override public void start(Stage stage) throws Exception
{
BorderPane root = new BorderPane();
ToggleButton button = new ToggleButton("Click");
final StringProperty btnText = button.textProperty();
button.setOnAction(new EventHandler<ActionEvent>()
{
@Override public void handle(ActionEvent actionEvent)
{
ToggleButton source = (ToggleButton) actionEvent.getSource();
if (source.isSelected())
{
btnText.set("Clicked!");
}
else
{
btnText.set("Click!");
}
}
});
root.setCenter(button);
Scene scene = new Scene(root);
stage.setScene(scene);
stage.setWidth(200);
stage.setHeight(200);
stage.show();
}
}
程序按预期编译并运行。
我按照那篇文章中的说明将按钮事件处理代码替换为:
button.setOnAction((ActionEvent event)->
{
ToggleButton source = (ToggleButton) event.getSource();
if (source.isSelected())
{
btnText.set("Clicked!");
}
else
{
btnText.set("Click!");
}
});
编译时出现以下错误(button.setOnAction((ActionEvent event)-> 行):
> lambda expressions are not supported in -source 1.8
> (use -source 8 or higher to enable lambda expressions)
我添加了参数-source 8,没有任何改变。
我只想检查 Java 8 中的 lambda 表达式功能。为什么它不起作用?
【问题讨论】:
-
可能实现还没有完成。你检查过发行说明吗?他们是否说 Lambdas 应该工作?无论如何,这可能是您应该与 Java 开发人员讨论的事情……使用提供的反馈渠道(无论它们是什么)。
-
@StephenC 嗯,这个版本的 JDK/JRE 8 是我能找到的最新版本(发布日期:2012 年 6 月 21 日)。我花了 20 秒才找到那个代码示例,这意味着还有更多。我认为它们应该可以工作,也许并不完美,但是......如果最重要的功能不存在,为什么还要继续发布开发者预览版?
-
编译器抱怨你在参数中有
-source 1.8。您是否编辑了该论点,或者直接“添加论点-source 8”?可能是您没有完全控制javac命令行,所以无效参数仍然存在? -
@SoboLAN 因为他们的预发布目标是迭代 JDK,而不是一种特定的语言特性。
-
@MarkoTopolnik 无论我是否指定
-source 8参数,它都会给出相同的错误。
标签: java lambda javafx-2 java-8