2015-04-15 39 views
6

Tôi tryig để thực hiện một expresion lambda cho một ActionListener, nhưng nó đem lại cho tôi một IllegalStart phát biểu, những gì tôi đang cố gắng để chạy cho đến nay trông như thế này:biểu Lambda trong java không làm việc

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

    frame.setVisible(true); 

Mặt khác, khi tôi sử dụng mã này để thay thế:

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

Nó hoạt động hoàn toàn tốt đẹp,

Ban đầu tôi tought vấn đề này có thể là phiên bản của java tôi đang chạy, nhưng tôi chỉ cần cập nhật và giữ làm như vậy, khi tôi làm một -version java tôi mang lại cho tôi những điều sau đây:

java -version phiên bản java "1.8.0_45" Java (TM) SE Runtime Environment (xây dựng 1.8.0_45-b14) Java HotSpot (TM) khách hàng VM (xây dựng 25,45-b02, chế độ hỗn hợp)

vì vậy, theo như tôi biết nó có một phiên bản tương thích với biểu thức lambda nhưng không succed trên khiến họ làm việc, bất kỳ ý tưởng hoặc đề nghị về những gì anh ta có thể xảy ra?

EDIT: Khi tôi cố gắng để biên dịch i có được điều này:

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

EDIT2: tôi không sử dụng bất kỳ IDE, im biên soạn từ dòng lệnh

+1

Bạn đang sử dụng IDE nào? Bạn có chắc chắn JDK cho dự án của bạn được định nghĩa cho Java 8 JDK home? – mtyurt

+1

Trong IDE của bạn, bạn có đang biên dịch mã của mình thành 1.8 không? (trong Eclipse: các thuộc tính dự án> trình biên dịch java> tuân thủ JDK). Bất kể JRE bạn đang sử dụng để chạy nó, bạn vẫn cần phải biên dịch nó là 1,8. –

+0

Im không sử dụng bất kỳ IDE, im chạy nó từ dòng lệnh ... – user4792574

Trả lời

9

Sửa

Theo nhận xét của bạn, bạn không sử dụng bất kỳ IDE nào và phiên bản javac của bạn là 1.7. Bạn cần biên dịch với java 8, nếu không lambda sẽ không được nhận ra.


tôi sẽ giữ phần này trong câu trả lời của tôi vì nó có thể giải quyết vấn đề cho người khác, ngay cả khi đây không phải là giải pháp trong trường hợp này.

Lambda của bạn hoàn toàn ổn. Lỗi này có thể do cài đặt mức tuân thủ trình biên dịch sai.

Nếu bạn sử dụng Eclipse, hãy tham khảo bài viết này để làm thế nào để thay đổi mức độ biên dịch tuân thủ:

How to change JDK version for an Eclipse project

Nếu bạn sử dụng Netbeans, hãy nhớ (đây là điều mà nhiều người quên) mà bạn phải thiết lập cả hai mục tiêu sourcelibraries nhắm mục tiêu đến 8 nếu bạn muốn nó hoạt động bình thường.


Nguồn enter image description here


Libraries

enter image description here

Calling java -version từ dòng lệnh không có nghĩa là thư viện thích hợp được đặt trong IDE, vì vậy bạn phải xác minh điều này.

Nếu bạn sử dụng bất kỳ IDE nào khác thì google "Cách thay đổi phiên bản jdk trên YourIDE".

5

Và nếu bạn đang sử dụng IntelliJ bởi bất kỳ cơ hội, hãy chắc chắn trình độ ngoại ngữ Dự án được thiết lập để 8 - Lambdas ..

enter image description here

2

boton.addActionListener (sự kiện -> System.out.println ("Chào thế giới!")); - Biểu thức Lambda hoàn toàn ổn. Bạn đang chuyển event thành action actionPerformed của giao diện chức năng ActionListener sẽ được ánh xạ trong khi biên dịch mã bằng trình biên dịch java 8.

Vui lòng kiểm tra phiên bản java của bạn.

+0

Tôi đã kiểm tra phiên bản java của mình. Bây giờ nó làm việc –

Các vấn đề liên quan