Ошибка Eclipse: java.lang.CharSequence не может быть разрешен

Я получаю ошибку, пытаясь скомпилировать простой код в 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); затмение показывает эту ошибку:

Тип java.lang.CharSequence не может быть разрешен. Это неверно ссылается на требуемые файлы .class.

Ответ 1

Убедитесь, что среда Eclipse поддерживает Java 8:

Первой версией Eclipse, поддерживающей Java 8, был Eclipse Kepler SR2 (4.3.2) с дополнительным патчем. (См. Установка поддержки Java ™ 8 в Eclipse Kepler SR2 и соответствующий элемент Marketplace, который необходимо установить: Поддержка Java 8 для Eclipse Kepler SR2).

По-моему, вы должны ухаживать за последняя версия Eclipse.

С Luna SR2 (4.4.2) дополнительный патч не требуется.


Убедитесь, что 1.8 JRE доступно в вашей рабочей области:

Windows > Предпочтения: Java > Установленные JRE

Installed JREs

Если это не так, вы можете добавить новую JRE с кнопкой добавления.


Убедитесь, что JRE System Library == JavaSE-1.8 для вашего проекта

В Проводнике пакетов вы должны увидеть версию 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>

Восстановить проект

Меню проектa > Очистить...

Выберите проект из списка или "Очистить все проекты" и "Начать сборку сразу"


См. также:

Ответ 2

Это связано с тем, что класс BytecodeParser в soot.JastAddJ не поддерживает более высокую версию формата файла 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 класса для поддержки синтаксического анализа:

в методе parseEntry of soot.JastAddJ.BytecodeParser, добавьте

CONSTANT_MethodHandle_Info, CONSTANT_MethodType_Info, CONSTANT_InvokeDynamic_Info

в блоке корпуса коммутатора.

Теперь сажа может успешно работать.