15

Windows XP SP3 32 ビットを実行している仮想マシンがあります。このマシンに Java SE JDK 8 build b44 Developer Preview をhereからインストールしました。

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 のラムダ式の機能を確認することだけでした。なぜ機能しないのですか?

4

2 に答える 2

28

ラムダ式機能を含むバイナリをダウンロードする必要があります。ここからダウンロードしてみてくださいhttp://jdk8.java.net/lambda/。ラムダ式ブランチがメインのJDK8ビルドにマージされていることをメーリングリストで読んだことを覚えていますが、それが行われたかどうかはわかりません。しかし、私はLambdaプロジェクトページからのビルドを使用します。

于 2012-06-24T14:28:14.243 に答える
2

http://jdk8.java.net/lambda/リリースの代替として、 http: //jdk8.java.net/download から dmg、exe インストーラー、および tar.gz 形式で利用可能な JDK8 および JRE8 スナップショット リリースもあります。 .html .

これらの jdk8 開発者スナップショットには、ラムダ (および javafx8) 機能も含まれるようになりました。これを書いている時点では、jdk8 の lambda と javafx の両方がまだ機能およびバグ修正の開発モードにあります。

http://jdk8.java.net/download.htmlウィークリー ビルドが便利で、開発に使用できることがわかりました(これらを使用するプログラムは、Mac でクラッシュすることがあるため、本番環境にデプロイしたいものではありません。ビルドのオラクルライセンスでは許可されていましたが、許可されていません)。

最新のブリーディング エッジまたはカスタマイズされた jdk ビルドが必要な場合は、obuildfactoryを使用して独自のビルドを作成できます。このようなビルドでは、Oracle JDK ライセンス モデルではなく OpenJDK ライセンス モデルが使用されます。これは一部の開発プロジェクトには適しているかもしれませんが、個人的には、できる限り Oracle JDK ビルドを使用しています。

于 2012-12-29T01:39:26.733 に答える