Les expressions Lambda ne fonctionnent pas dans Java 8?

J'ai une machine virtuelle sous Windows XP SP3 32 bits. Sur cette machine
J'ai installé le Java SE JDK 8 construire b44 Developer Preview de ici.

J'ai aussi installé le JavaFX SDK 2.1.

Il fonctionne très bien:

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)

J'ai essayé de lancer le programme suivant (tiré de ici):

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();
}
}

Le programme compilé et exécuté comme prévu.

J'ai suivi les instructions dans cet article, remplacé le bouton de gestion des événements avec ce code:

button.setOnAction((ActionEvent event)->
{
ToggleButton source = (ToggleButton) event.getSource();
if (source.isSelected())
{
btnText.set("Clicked!");
}
else
{
btnText.set("Click!");
}
});

Lors de la compilation, j'obtiens l'erreur suivante (sur la ligne button.setOnAction((ActionEvent event)->):

> lambda expressions are not supported in -source 1.8
> (use -source 8 or higher to enable lambda expressions)

J'ai ajouté l'argument -source 8, rien n'a changé.

Tout ce que je voulais, c'était de vérifier les expressions lambda fonctionnalités en Java 8. Pourquoi ne pas travailler ?

Peut-être que la mise en œuvre n'est pas encore complet. Avez-vous vérifié les notes de version? - Ils disent que les Lambdas doit être au travail? De toute façon, c'est quelque chose que vous devriez probablement être discuter avec les développeurs Java ... à l'aide de la rétroaction des canaux prévus (quels qu'ils soient).
Eh bien, cette version de JDK/JRE 8 est la dernière que j'ai pu trouver (date de sortie: 21 juin 2012). Et il m'a pris 20 secondes pour trouver le code de l'échantillon, ce qui signifie qu'il ya beaucoup plus là-bas. Je suppose qu'ils doivent travailler, peut-être pas parfaitement, mais... pourquoi continuer à sortir Developer Preview versions si la caractéristique la plus importante est inexistante ?
Le compilateur se plaint que vous avez -source 1.8 dans les arguments. Avez-vous modifier cet argument, ou littéralement "ajouter l'argument -source 8"? Se pourrait-il que vous n'avez pas le plein contrôle sur la javac ligne de commande de sorte que l'argument non valide est toujours là?
Parce que leur but avec des pré-versions est d'itérer sur les JDK, pas une fonctionnalité du langage.
Whaaaaaat? Java 8?

OriginalL'auteur Radu Murzea | 2012-06-24