【问题标题】:Eclipse Error: java.lang.CharSequence cannot be resolvedEclipse 错误:无法解析 java.lang.CharSequence
【发布时间】:2014-07-13 22:22:00
【问题描述】:

尝试在 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 文件中被错误地引用。

【问题讨论】:

标签: java eclipse


【解决方案1】:

确保您的 Eclipse IDE 支持 Java 8:

第一个支持 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) 不需要额外的补丁。


确保 1.8 JRE 在您的工作区中可用:

Windows > 首选项:Java > 已安装的 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>

重建您的项目

项目菜单 > 清理...

从列表中选择您的项目或“清理所有项目”和“立即开始构建”


另见:

【讨论】:

  • 这是一个老问题,但我会将您的答案标记为正确以帮助其他人。还是谢谢
  • 我也有同样的问题。但是我的eclipse使用的是jre1.8.0.45。但我仍然面临“StringBuilder”或“StringBuffer”类的问题。
  • "你应该打开上下文菜单 JRE System Library 项目并选择属性菜单项"我该怎么做?
【解决方案2】:

这是因为soot.JastAddJ中的BytecodeParser类不支持更高版本的java类文件格式。遗漏了常量池类型的CONSTANT_MethodHandle、CONSTANT_MethodType和CONSTANT_InvokeDynamic。下面是我的解决方法:

(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

在 switch case 块中。

现在,soot 可以成功运行了。

【讨论】:

  • 这些开关盒应该做什么?你能帮帮我吗?
  • 解析java类文件中的常量池,具体可以学习java类文件格式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-29
  • 1970-01-01
  • 2017-12-31
  • 2011-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多