簡體   English   中英

標記上的語法錯誤,Lambda 表達式錯位的構造

[英]Syntax error on token(s), misplaced construct(s) for lambda expression

我在用於線程的以下代碼中遇到了語法問題:

        btnNewButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e){
            new Thread(() -> {
                GrabberShowUsesCallable gs = new GrabberShowUsesCallable();
                //GrabberShow gs = new GrabberShow();
                ExecutorService executorService = Executors.newSingleThreadExecutor();
                Future<String> future = executorService.submit(gs);
                String cc;
                try {
                    //Add data to table
                    cc = future.get();
                    model.addRow(new Object[] {row,0,cc,0});
                    row=row+1;
                    Thread.currentThread().stop();
                } catch (InterruptedException | ExecutionException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }).start();
        }
    });

我在第 3 行新線程中遇到錯誤:

此行有多個標記 - 標記上的語法錯誤,錯位的構造 - 標記上的語法錯誤,刪除這些標記

在這一行中,我收到了兩個語法錯誤,一個來自( ()

標記上的語法錯誤、錯位的構造

還有一個來自-> {

令牌上的語法錯誤,刪除這些令牌

代碼在 3 台不同的筆記本電腦上運行良好,除了一台(我的筆記本電腦)遇到了這個問題。 我正在使用安裝了 jre 8.0 和 jdk 8.0 的 Eclipse。

確保您的java源代碼級別也是java8,在eclipse項目設置覆蓋中,如果eclipse默認不是java8源代碼級別。 這是典型的忽視。

如果https://stackoverflow.com/a/50173565/139985 (設置編譯器源代碼級別)不能解決您的問題,那么這里還有幾件事需要檢查。

Lambda 表達式是 Java 8+ 的一項功能,因此:

  • 檢查您的 JDK / JRE 是否為 Java 8 或更高版本。
  • 檢查您使用的是支持 Java 8 的 Eclipse 版本。Eclipse 的第一個“開箱即用”支持 Java 8 的主要版本是Eclipse Luna (R 4.4)

此外,如果您使用 Maven,請確保 Maven POM 文件明確指定 Java 源代碼級別:

Maven 的默認源代碼是 Java 5,這將破壞您在 Eclipse 設置中為項目設置的源代碼級別。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM