2014-07-13 24 views
11

Si verifica un errore durante il tentativo di compilare un codice semplice in Eclipse. Sto usando jre8.Errore Eclipse: java.lang.CharSequence non può essere risolto

Per esempio, quando provo a compilare questo codice:

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); 
    } 
} 

ottengo un errore nella riga Collections.sort(myList);.

L'errore è:

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) 

ho già aperto eclissi costruire il percorso, rimosso JRE Sistema Bibliotecario [jre8] e ha aggiunto di nuovo. Ma non ha funzionato! Cosa posso fare? Grazie!

PS .: In linea eclisse Collections.sort(myList); mostra questo errore:

Il tipo java.lang.CharSequence non può essere risolto. È referenziato inderamente dai file .class richiesti.

+0

Quale JDK stai usando? –

+0

jdk1.8.0_05 (direttamente dalla cartella) – felipeek

+2

Hai provato a creare un nuovo spazio di lavoro? – JamesB

risposta

12

Assicurarsi che il vostro Eclipse IDE supporta Java 8:

La prima versione di Eclipse che supporti Java 8 è stata Eclipse Kepler SR2 (4.3.2) con un ulteriore patch. (Vedere: Installing Java™ 8 Support in Eclipse Kepler SR2 e l'articolo del marketplace corrispondente che deve essere installato: Java 8 support for Eclipse Kepler SR2).

A mio parere si dovrebbe udire il latest Eclipse Version.

Con Luna SR2 (4.4.2) non è necessaria alcuna patch aggiuntiva.


Assicurarsi il 1,8 JRE è disponibile nel tuo spazio di lavoro:

Windows> Preferenze: Java> JRE installata

Installed JREs

Se questo non è il caso, è possibile aggiungere un nuovo JRE con il pulsante Aggiungi.


Assicurarsi che JRE System Library == JavaSE-1.8 per il vostro progetto

In Esplora pacchetto, si dovrebbe vedere la versione Java:

Package Explorer

Se questo non è giusto, bisogna aprire il menu contestuale l'elemento JRE System Library e selezionare la voce di menu Properties.

JRE System Library - Properties

Nel progetto si dispone di un file .classpath (Utilizzare la Navigator View se non si vede il file), che dovrebbe apparire in questo modo:

<?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> 

Rigenerare il progetto

Menu Progetto> Clean ...

Selezionare il progetto dall'elenco o "Pulire tutti i progetti" e "Start una costruzione immediatamente"


Consulta anche:

+0

Questa è una vecchia domanda, ma contrassegnerò la risposta come corretta per aiutare altre persone. Grazie comunque – felipeek

+0

Sto avendo lo stesso problema. Ma la mia eclissi sta usando jre1.8.0.45. Ma sto ancora affrontando il problema con la classe 'StringBuilder' o 'StringBuffer'. –

+0

"è necessario aprire il menu di scelta rapida nella voce Libreria di sistema JRE e selezionare la voce di menu Proprietà" come si fa? – levininja

1

Questo perché la classe BytecodeParser in soot.JastAddJ non supporta la versione superiore del formato di file di classe java.Il tipo CONSTANT_MethodHandle, CONSTANT_MethodType e CONSTANT_InvokeDynamic del tipo di pool costante non è presente. x la domanda:

(1) aggiungere il tipo 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) aggiungere 3 classi per supportare parse:

nel metodo parseEntry di fuliggine. JastAddJ.BytecodeParser, aggiungere

CONSTANT_MethodHandle_Info, CONSTANT_MethodType_Info, CONSTANT_InvokeDynamic_Info

nel blocco interruttore.

Ora, la fuliggine può essere eseguita correttamente.

+0

cosa dovrebbero fare questi casi di interruttore? Mi potete aiutare per favore? – osanger

+0

per analizzare il pool costante nel file di classe java, è possibile imparare il formato di file di classe java per i dettagli. –

+0

ty. ho già risolto il problema :) – osanger

Problemi correlati