(java) cannot find symbol
j'essaye de compiler un programme java et il m'affiche l'erreur "cannot find symbol"
public class TrecTerrier {
/** The logger used */
public static Logger logger=Logger.getRootLogger();///////c'est cette ligne qui pose probleme
/** The unkown option*/
protected String unknownOption;
/** The file to evaluation, if any */
}....
au niveau de la ligne en gras alors que j'ai bien importé "import java.util.logging.Logger;"
SVP, si quelqu'un d'entre vous pourrait m'aider, j'en ai vraiment besoin!
Configuration: Windows XP Firefox 3.0.10
36 réponses
Le point central est l'erreur "cannot find symbol" lors de la compilation d'un programme Java, causée par une utilisation de Logger.getRootLogger() sur la ligne indiquée malgré l'importation apparente. Des réponses soulignent la confusion entre java.util.logging.Logger et la classe Logger de Log4j, ce qui rend incompatible l'appel à getRootLogger et provoque le "cannot find symbol". La solution proposée consiste soit à adopter org.apache.log4j.Logger avec le jar Log4j sur le classpath, soit à remplacer par java.util.logging.Logger et utiliser une syntaxe adaptée. En cas de doute, vérifier le type exact de Logger utilisé et s'assurer que les dépendances correspondantes sont présentes dans le projet, afin d'éviter les erreurs de compilation liées aux symboles manquants.
-
il ne serait pas bon parce que la classe 'SnowballStemmer' est abstraite
-
Et un
SnowballStemmer stemmer = new SnowballStemmer (...) ;
pas bon pour quelles raisons? -
oui c'est moi qui l'a modifié, initialement c'était:
Class stemClass = Class.forName("org.tartarus.snowball.ext."+s+"Stemmer");
et c'est vous méme qui m'aviez dit qu'il fallait modifier sinon il va certainement planter! -
Miss.... ce n'est pas le code téléchargé, c'est bien toi qui a écrit ceci, non?
Class stemClass = Class.forName("uk.ac.gla.terrier.terms." +s+ "SnowballStemmer");
:-) -
sandul......c'est le code que j'ai téléchargé, c'est venu dans le package, donc c'est pas moi qui cherche à instancier dynamiquement!!!!
moi je cherche juste à voir son résultat, c'est ce qui m'intéresse, c'est ce dont j'ai besoin -
T là sandul?
Voui, mais sur un portable sans possibilité de tests. Tu n'as pas répondu à ma question: pourquoi as-tu besoin d'une instanciation dynamique? -
t là sandul?
-
là il me sort une nouvelle version du probleme:
Exception in thread "main" java.lang.InstantiationException: uk.ac.gla.terrier.terms.FrenchSnowballStemmer
at java.lang.Class.newInstance0(Class.java:340)
at java.lang.Class.newInstance(Class.java:308)
at lemmatisation1.lem.lem(lem.java:34)
at lemmatisation1.lem.main(lem.java:80)import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Reader; import java.io.Writer; import org.tartarus.snowball.SnowballProgram; import uk.ac.gla.terrier.terms.SnowballStemmer; public class lem { public static void lem(String s, String s1,String s2) throws Throwable{ Class stemClass = Class.forName("uk.ac.gla.terrier.terms." + s+ "SnowballStemmer"); SnowballStemmer stemmer = (SnowballStemmer) stemClass.newInstance(); SnowballProgram stemmer1 = (SnowballProgram) stemClass.newInstance(); Reader reader; reader = new InputStreamReader(new FileInputStream(s1)); reader = new BufferedReader(reader); StringBuffer input = new StringBuffer(); OutputStream outstream; outstream = new FileOutputStream(s2); Writer output = new OutputStreamWriter(outstream); output = new BufferedWriter(output); int repeat = 1; Object [] emptyArgs = new Object[0]; int character; while ((character = reader.read()) != -1) { char ch = (char) character; if (Character.isWhitespace((char) ch)) { if (input.length() > 0) { stemmer1.setCurrent(input.toString()); for (int i = repeat; i != 0; i--) { stemmer.stem(""); } output.write(stemmer1.getCurrent()); output.write('\n'); input.delete(0, input.length()); } } else { input.append(Character.toLowerCase(ch)); } } output.flush(); } @SuppressWarnings("static-access") public static void main(String[] args) throws Throwable { // TODO code application logic here lem l=new lem(); l.lem("French","entree.txt","resultat.txt"); } } -
t là sandul?
-
Nan, c'est la grue qui sert à le charger qui l'est =)
-
ton micro onde est en panne?
-
Mici, mais (pour des raisons techniques) je ne peux pas encore aller manger :(
-
bon apétit
-
Ben bon courage à nouveau =)
Moi j'ai faim ^^ -
tout te parait simple sandul mais c'est tout à fait le contraire pour moi
j'vais tout supprimer et je recommence tout à zero parce que là j'mélange sérieusement les pinceaux! -
Mdrrrr
Mais nan, ce n'est pas ça... Suffit de mettreClass stemClass = Class.forName("terrier.SnowballStemmer");Dis, pourquoi as-tu besoin d'une instanciation dynamique? -
sachant que le chemin absolu vers ma classe "frenchSnowballStemmer" est:
\terrier-2[1].1\terrier\src\uk\ac\gla\terrier\terms
j'ai mis dans mon:
Class stemClass = Class.forName("terrier-2[1].1.terrier.src.uk.ac.gla.terrier.terms."+s+"SnowballStemmer");
et il dit que :
Exception in thread "main" java.lang.ClassNotFoundException: terrier-2[1]/1/terrier/src/uk/ac/gla/terrier/terms/frenchSnowballStemmer
at java.lang.Class.forName0(Native Method)
je vais péter un cable! -
OK. Est-ce que tu as lu avec attention le point 2 du poste #12?
Tu fais un import
import terrier.SnowballStemmer;
et essaies de créer ceci:
Class stemClass = Class.forName("org.tartarus.snowball.ext." + s + "Stemmer");
Normal que ça plante. -
Bon, il me manque des classes...
abstract public class SnowballStemmer implements TermPipeline { <==
où est-ce que je dois chopper ce truc (i.e., TermPipeline) ?-
-
@missbonsoir Miss,
ewt ce que vous ouvez m'envoyer le lien qui permet de telecharger l API: uk.ac.gla.terrier.terms.
merci
-
-
Ah, je vois que tu as déjà répondu en partie avec ton post #14 :)
++
- 1
- 2