我在Eclipse中编译一个简单的代码时遇到错误。我正在使用jre8。
例如,当我尝试编译此代码时:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class MyProject {
public static void main (String args[])
{
List<String> myList = new ArrayList<String>();
myList.add("test");
myList.add("test2");
Collections.sort(myList);
}
}
我在Collections.sort(myList);
行收到错误。
错误是:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The type java.lang.CharSequence cannot be resolved. It is indirectly referenced from required .class files
at project.Principal.main(Principal.java:14)
我已经打开了eclipse Build Path,删除了JRE系统库[jre8]并再次添加它。但没有奏效!我能做什么?谢谢!
PS:在Collections.sort(myList);
行eclipse中显示此错误:
无法解析java.lang.CharSequence类型。它从所需的.class文件中直接引用。
答案 0 :(得分:12)
支持Java 8的第一个Eclipse版本是Eclipse Kepler SR2(4.3.2),附带了一个补丁。 (请参阅:Installing Java™ 8 Support in Eclipse Kepler SR2,以及需要安装的相应市场项目:Java 8 support for Eclipse Kepler SR2)。
在我看来,你应该使用latest Eclipse Version。
使用Luna SR2(4.4.2)时,无需额外的补丁。
Windows&gt;偏好:Java&gt;已安装的JRE
如果不是这种情况,您可以使用添加按钮添加新的JRE。
JRE System Library
== JavaSE-1.8
在Package Explorer中,您应该看到Java版本:
如果这不正确,您应打开JRE System Library
项目的上下文菜单,然后选择Properties
菜单项。
在您的项目中,您有一个.classpath
文件(如果您没有看到该文件,请使用Navigator View
),如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry kind="output" path="bin"/>
</classpath>
项目菜单&gt;清洁...
从列表中选择您的项目或&#34;清理所有项目&#34;和&#34;立即开始构建&#34;
另见:
答案 1 :(得分:1)
这是因为soot.JastAddJ中的BytecodeParser类不支持更高版本的java类文件格式。常量池类型的CONSTANT_MethodHandle,CONSTANT_MethodType和CONSTANT_InvokeDynamic错过了.Below是我解决问题的解决方案:
(1)添加int soot.JastAddJ.BytecodeParser:
private static final int CONSTANT_MethodHandle=15;
private static final int CONSTANT_MethodType=16;
private static final int CONSTANT_InvokeDynamic=18;
(2)添加3个类来支持解析:
在soot.JastAddJ.BytecodeParser的方法parseEntry
中,添加
CONSTANT_MethodHandle_Info, CONSTANT_MethodType_Info, CONSTANT_InvokeDynamic_Info
在开关案例块中。
现在,soot可以成功运行。