繁体   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