2015-04-15 14 views
6

mam tryig dokonać wprowadzić wyrażenie lambda dla ActionListener, ale to daje mi IllegalStart wypowiedzi, co staram się uruchomić tak dalece wygląda następująco:Lambda wyraz w java nie działa

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

    frame.setVisible(true); 

z drugiej strony, jeśli mogę użyć tego kodu:

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

to działa perfekcyjnie,

Początkowo myślałam kwestia może być wersja java biegnę, ale ja po prostu aktualizowany i trzyma robi to samo, kiedy zrobić -version java i daje mi następujące:

java -version wersja java "1.8.0_45" Java (TM) SE Runtime Environment (build 1.8.0_45-B14) Java HotSpot (TM) Client VM (build 25,45-B02, tryb mieszany)

tak, o ile wiem, to masz wersję zgodną z wyrażenia lambda ale nie succed na wprowadzenie ich do pracy, wszelkie pomysły i sugestie co mógł się stać?

EDIT: Kiedy próbuję skompilować i uzyskać w ten sposób:

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

EDIT2: nie używam żadnych IDE, im kompilacji z wiersza poleceń

+1

Jakiego IDE używasz? Czy na pewno JDK dla twojego projektu jest zdefiniowany jako home Java JDK? – mtyurt

+1

W swoim IDE, czy kompilujesz swój kod jako 1.8? (w Eclipse: właściwości projektu> kompilator java> zgodność z JDK). Niezależnie od tego, z jakiego środowiska JRE korzystasz, musisz go jeszcze skompilować w wersji 1.8. –

+0

Nie używam żadnego IDE, im uruchamiam go z wiersza poleceń ... – user4792574

Odpowiedz

9

Edit

Zgodnie z Twoimi komentarzami, nie korzystasz z żadnego IDE, a twoja wersja javac to 1.7. Musisz skompilować z Javą 8, inaczej lambda nie zostanie rozpoznana.


będę w tej części mojej odpowiedzi, gdyż może to rozwiązać problem dla kogoś innego, nawet jeśli nie było to rozwiązanie w tej sprawie.

Twoja lambda jest idealnie w porządku. Błąd jest prawdopodobnie spowodowany nieprawidłowym ustawieniem poziomu zgodności kompilatora.

Jeśli używasz zaćmienie, odnoszą się do tego wpisu za jak zmienić poziom zgodności kompilator:

How to change JDK version for an Eclipse project

Jeśli używasz NetBeans zapamiętania (to jest coś, wielu ludzi zapomina), że trzeba ustawić zarówno cel source i libraries do 8, jeśli chcesz, aby działał poprawnie.


Źródło enter image description here


Biblioteki

enter image description here

Wywoływanie java -version z linii poleceń, nie oznacza, że ​​właściwa biblioteka mieści się w IDE, więc musisz to zweryfikować.

Jeśli używasz dowolnego innego IDE to google "Jak zmienić wersję jdk na YourIDE".

5

A jeśli używasz IntelliJ przypadkiem, upewnij się poziom języka Projekt jest ustawiony na 8 - lambdas ..

enter image description here

2

boton.addActionListener (event -> System.out.println ("Witaj świecie!")); - Lambda Expression jest całkowicie w porządku. Przechodzisz zdarzenie do actionPerformed metoda funkcjonalnego interfejsu ActionListener, który zostanie zmapowany podczas kompilacji kodu przy użyciu kompilatora java 8.

Proszę sprawdzić wersję Java.

+0

Sprawdziłem moją wersję Java. Teraz działa –