Eclipse错误:java.lang.CharSequence无法解析

10

我在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 System Library [jre8]并重新添加了它。但是没有起作用!我该怎么办?谢谢!

PS .:在Collections.sort(myList);这一行中,Eclipse显示此错误:

类型java.lang.CharSequence无法解析。它间接引用所需的.class文件。


你使用的是哪个JDK? - Juned Ahsan
jdk1.8.0_05(直接从文件夹中获取) - felipeek
2
你尝试过创建一个新的工作区吗? - JamesB
你的Eclipse版本是多少?请参考如何设置带有JRE 8的Eclipse? - PM 77-1
你在Eclipse中为Java设置了哪个合规级别? - David Conrad
1
可能是重复的问题:在包声明中无法解析类型java.lang.CharSequence - Grzegorz Oledzki
2个回答

14

确保您的Eclipse IDE支持Java 8:

第一个支持Java 8的Eclipse版本是Eclipse Kepler SR2(4.3.2),需要安装额外的补丁。(请参阅:在Eclipse Kepler SR2中安装Java™ 8支持,以及需要安装的相应Marketplace项目:Java 8 support for Eclipse Kepler SR2)。

在我看来,您应该升级到最新的Eclipse版本

使用Luna SR2(4.4.2),无需安装额外的补丁。


确保您的Workspace中可用1.8 JRE:

Windows > Preferences: Java > Installed JREs

Installed JREs

如果不是这种情况,您可以使用添加按钮添加新的JRE。


确保您的Project的JRE System Library == JavaSE-1.8

在Package Explorer中,您应该看到Java版本:

Package Explorer

如果不正确,您应该打开上下文菜单中的JRE System Library项,并选择Properties菜单项。

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>

重建你的项目

项目菜单 > 清除...

从列表中选择你的项目或选择“清除所有项目”并“立即开始构建”


另请参阅:


这是一个老问题,但我会将您的答案标记为正确答案,以帮助其他人。无论如何感谢您。 - felipeek
我也遇到了同样的问题。但我的eclipse正在使用jre1.8.0.45版本。但我仍然面临着使用'StringBuilder'或'StringBuffer'类的问题。 - zookastos
你应该打开JRE系统库项目的上下文菜单,并选择属性菜单项。我该怎么做? - levininja

1
这是因为在soot.JastAddJ中的BytecodeParser类不支持更高版本的java类文件格式。常量池类型的CONSTANT_MethodHandle、CONSTANT_MethodType和CONSTANT_InvokeDynamic被遗漏了。下面是我的解决方案:
(1)在soot.JastAddJ.BytecodeParser中添加int类型。
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

在switch case块中。

现在,soot可以成功运行。


这些 switch case 做什么用的?你能帮我吗? - osanger
要解析Java类文件中的常量池,您可以详细了解Java类文件格式。 - 胡启志

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接