(java) cannot find symbol

Bonjour,
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

Résumé de la discussion

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.

Bobot (l’IA à votre service)
  1. il ne serait pas bon parce que la classe 'SnowballStemmer' est abstraite
    1. Et un

      SnowballStemmer stemmer = new SnowballStemmer (...) ;

      pas bon pour quelles raisons?
      1. 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!
        1. 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");

          :-)
          1. 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
            1. 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?
              1. 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");
                    }
                
                }
                
                1. Mici, mais (pour des raisons techniques) je ne peux pas encore aller manger :(
                  1. 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!
                    1. Mdrrrr

                      Mais nan, ce n'est pas ça... Suffit de mettre
                      Class stemClass = Class.forName("terrier.SnowballStemmer");
                      Dis, pourquoi as-tu besoin d'une instanciation dynamique?
                      1. 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!
                        1. 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.
                          1. Bon, il me manque des classes...

                            abstract public class SnowballStemmer implements TermPipeline { <==

                            où est-ce que je dois chopper ce truc (i.e., TermPipeline) ?
                            1. public interface TermPipeline
                              {
                              /**
                              * Processes a term using the current term pipeline component and
                              * passes the output to the next pipeline component, if the
                              * term has not been discarded.
                              * @param t String the term to process.
                              */
                              public void processTerm(String t);
                              }
                            2. @missbonsoir Miss,
                              ewt ce que vous ouvez m'envoyer le lien qui permet de telecharger l API: uk.ac.gla.terrier.terms.
                              merci
                          • 1
                          • 2