我在运行以下代码时遇到问题:
public class LambdaTesting {
public static void main(String[] args){
new LambdaTesting();
}
public LambdaTesting(){
test1();
}
private void test1(){
Runnable x = () -> System.out.println("ok"); //error
}
}
这导致以下异常:
*Exception in thread "main" java.lang.IncompatibleClassChangeError
at java.lang.invoke.MethodHandleNatives.linkMethodHandleConstant(MethodHandleNatives.java:383)
at LambdaTesting.test1(LambdaTesting.java:24)
at LambdaTesting.<init>(LambdaTesting.java:20)
at LambdaTesting.main(LambdaTesting.java:15)
Caused by: java.lang.NoSuchMethodException: no such method: java.lang.invoke.LambdaMetafactory.metaFactory(Lookup,String,MethodType,MethodHandle,MethodHandle,MethodType)CallSite/invokeStatic
at java.lang.invoke.MemberName.makeAccessException(MemberName.java:765)
at java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:882)
at java.lang.invoke.MethodHandles$Lookup.resolveOrFail(MethodHandles.java:1019)
at java.lang.invoke.MethodHandles$Lookup.linkMethodHandleConstant(MethodHandles.java:1284)
at java.lang.invoke.MethodHandleNatives.linkMethodHandleConstant(MethodHandleNatives.java:381)
... 3 more
Caused by: java.lang.NoSuchMethodError: java.lang.invoke.LambdaMetafactory.metaFactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
at java.lang.invoke.MethodHandleNatives.resolve(Native Method)
at java.lang.invoke.MemberName$Factory.resolve(MemberName.java:854)
at java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:879)
... 6 more*
我已经安装了从:http://jdk8.java.net/lambda/(Windows x64 版本)下载 的jdk8
我在 Eclipse 版本中运行它:4.4.0 下载自: http: //downloads.efxclipse.org/eclipse-java8/2013-06-30/ (文件:org.eclipse.sdk.ide-win32.win32.x86_64。 2013 年 6 月 30 日 17:35 180M)
eclipse.ini 文件:
-vm
C:\Program Files\Java\jre8\bin\java.exe
-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20130521-0416
-showsplash
org.eclipse.platform
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Xms40m
-Xmx512m
项目属性 -> Java 编译器 -> 编译器合规级别:1.8(BETA)(选中使用默认合规设置)。
项目属性 -> Java 构建路径 -> 库:JRE 系统库 [jre8]
项目运行配置:
[JRE 选项卡] 项目 JRE (jre8) 已选中
[类路径选项卡] Boostrap 条目:JRE 系统库 [jre8]
我还尝试从 jre8/bin 目录中的命令行运行 LambdaTesting.class,但出现了相同的异常。
爪哇版:
C:\Program Files\Java\jre8\bin>java.exe -version
java version "1.8.0-ea"
Java(TM) SE Runtime Environment (build 1.8.0-ea-b102)
我的操作系统是:Windows 7 x64
有什么线索吗?
感谢@assylias ,我解决了使用jdk1.8.0/bin/javac.exe从命令行编译的问题,但在 Eclipse 中仍然没有结果。似乎 Eclipse 有错误的编译器。我尝试更改以下设置:首选项 - > Java - > 编译器,但我只能在“生成的 .class 文件兼容性”中选择 1.7 版(此设置中没有 1.8 版)。“使用默认合规性设置”导致上述异常。