2015-04-15 6 views
6

Ich tryig eine Lambda-expresion für eine Action zu machen, aber es ist mir eine IllegalStart des Ausdrucks zu geben, was ich versuche, so weit zu laufen wie folgt aussieht:Lambda Ausdruck in Java nicht funktioniert

JFrame frame = new JFrame(); 
    JButton boton = new JButton("Lambda Button"); 
    boton.addActionListener(event -> System.out.println("Hello World!")); 
    frame.add(boton); 

    frame.setVisible(true); 

Auf der anderen Seite, wenn ich diesen Code verwenden statt:

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

Es perfekt funktioniert gut,

i tought Zunächst wird die Ausgabe der Java-Version könnte ich laufen werde, aber ich gerade aktualisiert und hält tut das gleiche, wenn ich ein java -version gibt, gebe ich mir folgendes:

java -version java version "1.8.0_45" Java (TM) SE Runtime Environment (build 1.8.0_45-b14) Java HotSpot (TM) Client VM (Build 25.45-b02, mixed mode)

Also, soweit ich es haben, wissen eine Version kompatibel mit Lambda-Ausdruck, aber nicht succed auf was sie arbeiten, irgendwelche Ideen oder Vorschläge von was könnte er geschehen?

EDIT: Wenn ich versuche ich zu kompilieren bekommen dies:

Prueba.java:57: error: illegal start of expression 
      boton.addActionListener(event -> System.out.println("Hello World !")); 
              ^1 error 

EDIT2: ich jede IDE nicht verwenden, im von der Kommandozeile kompilieren

+1

Welche IDE verwenden Sie? Sind Sie sicher, dass das JDK für Ihr Projekt auf Java 8 JDK home definiert ist? – mtyurt

+1

In Ihrer IDE kompilieren Sie Ihren Code als 1.8? (in Eclipse: Projekteigenschaften> Java-Compiler> JDK-Konformität). Unabhängig davon, mit welcher JRE Sie es ausführen, müssen Sie es immer noch als 1.8 kompilieren. –

+0

Ich verwende keine IDE, ich führe es von der Befehlszeile aus ... – user4792574

Antwort

9

bearbeiten

Laut Ihrer Kommentare verwenden Sie keine IDE und Ihre javac Version ist 1.7. Sie müssen mit Java 8 kompilieren, sonst wird das Lambda nicht erkannt.


werde ich diesen Teil in meiner Antwort halten, wie es sonst das Problem für jemanden lösen kann, auch wenn dies in diesem Fall nicht die Lösung war.

Ihr Lambda ist völlig in Ordnung. Der Fehler ist wahrscheinlich auf eine falsche Compiler-Compliance-Einstellung zurückzuführen.

Wenn Sie Eclipse verwenden, finden Sie in diesem Beitrag, wie Sie den Compiler-Konformitätsstufe ändern:

How to change JDK version for an Eclipse project

Wenn Sie Netbeans verwenden, denken Sie daran (dies ist etwas, was viele Menschen vergessen), die Sie festgelegt haben sowohl das source als auch das libraries Ziel auf 8, wenn Sie möchten, dass es richtig funktioniert.


Quelle enter image description here


Bibliotheken

enter image description here

Aufruf java -version aus der Befehlszeile bedeutet nicht, dass die richtige Bibliothek in gesetzt die IDE, also müssen Sie dies überprüfen.

Wenn Sie eine andere IDE verwenden, dann googeln Sie "Wie jdk Version auf YourIDE ändern".

5

Und wenn Sie intellij durch Zufall verwenden, stellen Sie bitte sicher Projektsprache Ebene machen ist auf 8 - Lambda ..

enter image description here

2

boton.addActionListener (event -> System.out.println ("Hallo Welt!")); - Lambda Expression ist völlig in Ordnung. Sie übergeben das Ereignis an die actionPerformed-Methode der ActionListener-Funktionsschnittstelle, die beim Kompilieren von Code mithilfe des Java 8-Compilers zugeordnet wird.

Bitte überprüfen Sie Ihre Java-Version.

+0

Ich habe meine Java-Version überprüft. Jetzt geht es –