15

我有一台运行 Windows XP SP3 32 位的虚拟机。在这台机器上,我从这里安装了 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)

我尝试运行以下程序(取自此处):

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 表达式功能。为什么它不起作用?

4

2 回答 2

28

您需要下载包含 Lambda 表达式功能的二进制文件。尝试从这里下载http://jdk8.java.net/lambda/。我记得在邮件列表中看到 lambda 表达式分支正在被合并到主 JDK8 构建中,但不确定它是否已经完成。但我使用来自 Lambda 项目页面的构建。

于 2012-06-24T14:28:14.243 回答
2

作为http://jdk8.java.net/lambda/版本的替代版本,还有 JDK8 和 JRE8 快照版本,可从http://jdk8.java.net/download获得 dmg、exe 安装程序和 tar.gz 形式.html

这些 jdk8 开发人员快照现在还包括 lambda(和 javafx8)功能。在撰写本文时,jdk8 的 lambda 和 javafx 仍处于功能和错误修复开发模式。

我发现http://jdk8.java.net/download.html每周构建对开发很有用和有用(使用它们的程序偶尔会在我的 Mac 上崩溃,所以它绝对不是你想要部署到生产中的东西,即使构建的 oracle 许可证允许这样做,但他们不允许这样做)。

如果您想要绝对最新的前沿或定制的 jdk 构建,您可以使用obuildfactory构建自己的。此类构建使用 OpenJDK 许可模型而不是 Oracle JDK 许可模型,这对于某些开发项目可能更可取,但就个人而言,我尽可能坚持使用 Oracle JDK 构建。

于 2012-12-29T01:39:26.733 回答