(java) cannot find symbol

Fermé
miss - 18 mai 2009 à 16:36
 meryeme - 29 janv. 2010 à 02:07
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!
A voir également:

36 réponses

sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
18 mai 2009 à 17:11
Mmmm, attention à
j'ai importé la bibliothèque log4j dans mon package
et
import java.util.logging.Logger;

C'est là où le bât blesse =)

Il faut faire
import org.apache.log4j.Logger;
++
1
Essaie ça :

public class TrecTerrier {
/** The logger used */
public static Logger logger;
/** The unkown option*/
protected String unknownOption;
/** The file to evaluation, if any */

public TrecTerrier()
{
logger=Logger.getRootLogger();
}
}....
0
NookZ Messages postés 2138 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 7 mars 2013 514
18 mai 2009 à 16:53
Bonjour,

Il ne faut pas instancier l'élément dans cette partie je pense :
public static Logger logger;

et en mettant dans le constructeur de votre classe le
logger=Logger.getRootLogger();
0
sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
18 mai 2009 à 16:57
Salut,

alors que j'ai bien importé "import java.util.logging.Logger;" <==
Mais est-ce que le jar contenant cette classe est bien dans le classpath?

++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
je viens d'essayer vos deux solution mais cela ne marche pas, sa affiche toujours la méme erreur
0
bonsoir miss,
svp est ce que vous pouvez me donner l lien qui permet de telecharger l API: uk.ac.gla.terrier.terms
merci .
0
sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
18 mai 2009 à 17:00
[Edit] En fait, je me suis mal exprimé: est-ce que tu es sûre que "Logger" correspond bien à java.util.logging.Logger?? Car sinon, il faut rajouter le bon jar au classpath (par exemple, la bibliothèque log4j qui contient également une classe "Logger").

++
0
oui oui sandul, j'ai bien rajouté le bon jar au classpath.j'ai importé la bibliothèque log4j dans mon package
je vois vraiment pas ou est le probléme!!!!!
0
merci beaucoups sandul!!!!effectivement vous avez raison,j'ai plus d'erreur!
0
sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
18 mai 2009 à 17:22
;-)

[Ce vouvoiement finira par me tuer :p]
0
lol
0
bonjour,
j'ai encore la méme erreur mais avec un autre code, j'ai suivi les mémes étapes, ce qui a été fructueux pour le 1ér code mais pas pour le 2éme!
voici l'essentiel du code

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("org.tartarus.snowball.ext."+s+"Stemmer");
         SnowballStemmer stemmer = (SnowballStemmer)stemClass.newInstance();
         



	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) {
		    stemmer.setCurrent(input.toString());////ligne à probleme
		    for (int i = repeat; i != 0; i--) {
			stemmer.stem("");
		    }
		    output.write(stemmer.getCurrent());////2éme ligne à probleme
		    output.write('\n');
		    input.delete(0, input.length());
		}
	    } else {
		input.append(Character.toLowerCase(ch));
	    }
	}
	output.flush();
    }



Et voici le code de la classe SnowballStemmer qui est dans le package 'terrier'


package terrier;

import org.tartarus.snowball.SnowballProgram;
import java.lang.reflect.Method;
import uk.ac.gla.terrier.terms.TermPipeline;
/** 
  * @author Craig Macdonald <craigm{a.}dcs.gla.ac.uk>
  * @version $Revision: 1.2 $
  */
abstract public class SnowballStemmer implements TermPipeline {
	/** The actual snowball object that does the stemming */
	protected SnowballProgram stemmer = null;
	/** The appropriate method. Damn reflection APIs. */
	protected Method stemMethod = null;
	/** The next object in the term pipeline to pass stemmed terms to */
	protected TermPipeline next = null;
	/** The language that we're currently stemming in */
	protected String language = null;


	protected final static Object [] emptyArgs = new Object[0];
        private String courant;

	/** Creates a new stemmer object for the language StemLanguage. 
	  * @param StemLanguage Name of the language to generate the stemmer for. Must be a valid snowball stemmer language.
	  * @param next The next object in the term pipeline
	  */
	protected SnowballStemmer(String StemLanguage, TermPipeline next)
	{
		StemLanguage = StemLanguage.toLowerCase();
		try{
			Class stemClass = Class.forName("org.tartarus.snowball.ext." + StemLanguage + "Stemmer");
			stemmer = (SnowballProgram) stemClass.newInstance();
			stemMethod = stemClass.getMethod("stem", new Class[0]);
		}catch(Exception e){
			System.err.println("ERROR: Cannot generate snowball stemmer "+StemLanguage+" : "+e);
			e.printStackTrace();
		}
		language = StemLanguage;
		this.next = next;
	}


	/**
	 * Stems the given term and passes onto the next object in the term pipeline.
	 * @param t String the term to stem.
	 */
	public void processTerm(String t)
	{
		if (t == null)
			return;
		next.processTerm(stem(t));
	}

	/** Stems the given term and returns the stem 
	  * @param term the term to be stemmed.
	  * @return the stemmed form of term */
	public String stem(String term) {
		stemmer.setCurrent(term);
		/* one can only imagine why a stemmer abstract class wouldn't
		   wouldn't have a stem() method. */
		try{
			stemMethod.invoke(stemmer, emptyArgs); //stemmer.stem();		
		}catch (Exception e) {
			System.err.println("ERROR: Cannot use snowball stemmer "+language+" : "+e);
			e.printStackTrace();
		}
		return stemmer.getCurrent();
	}

        public void setCurrent(String value)
        { courant=value;
        }

        public String getCurrent(){
            return courant;
        }
        }


   



vous remarquez que les methodes "setCurrent" et "getCurrent" ont été bien définies et le 'import' est bien placé .......j'comprend pas comment il peut pas trouver le symbole!
0
sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
19 mai 2009 à 14:36
Hi there,

1. Pour la ligne
while ((character = reader.read()) != -1) {
: où est-ce que tu déclares l'objet reader? Pas de trace dans ton code posté...
2. Fais attention tit chaperon rouge, comme d'habitude lorsque l'on utilise le Class.forName() il y a des dangers...

Pour SnowballStemmer tu as le choix: org.tartarus.snowball.SnowballStemmer ou bien terrier.SnowballStemmer ? Ce choix (lorsque tu fais l'import) va se révéler capital au runtime.

++
0
merci sandul d'étre toujours là!
bon pour étre plus claire, j'ai téléchargé le package de terrier dans le but de lemmatiser les mots avec toutes les librairies, les classes et les jar qui vont avec!
mais pour le faire fonctionner j'ai créé la classe "lem" dont voici le code complet


package lem;
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 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("org.tartarus.snowball.ext."+s+"Stemmer");
         SnowballStemmer stemmer = (SnowballStemmer)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) {
		    stemmer.setCurrent(input.toString());
		    for (int i = repeat; i != 0; i--) {
			stemmer.stem("");
		    }
		    output.write(stemmer.getCurrent());
		    output.write('\n');
		    input.delete(0, input.length());
		}
	    } else {
		input.append(Character.toLowerCase(ch));
	    }
	}
	output.flush();
    }




    public static void main(String[] args) throws Throwable {
        // TODO code application logic here
//french est la langue des mots à lemmatiser parceque le package permet de le faire dans plusieurs langues
// entree est le fichier à entrer pour la lemmatisation
//resultat est le fichier contenant tout les mots lemmatisés
        lem("french","entree.txt","resultat.txt");
    }
}




et pour la classe SnowballStemmer, son code est dans le package que j'ai téléchargé, je te donne son code:

package terrier;

import org.tartarus.snowball.SnowballProgram;
import java.lang.reflect.Method;
import uk.ac.gla.terrier.terms.TermPipeline;
/** 
  * @author Craig Macdonald <craigm{a.}dcs.gla.ac.uk>
  * @version $Revision: 1.2 $
  */
abstract public class SnowballStemmer implements TermPipeline {
	/** The actual snowball object that does the stemming */
	protected SnowballProgram stemmer = null;
	/** The appropriate method. Damn reflection APIs. */
	protected Method stemMethod = null;
	/** The next object in the term pipeline to pass stemmed terms to */
	protected TermPipeline next = null;
	/** The language that we're currently stemming in */
	protected String language = null;


	protected final static Object [] emptyArgs = new Object[0];
        private String courant;

	/** Creates a new stemmer object for the language StemLanguage. 
	  * @param StemLanguage Name of the language to generate the stemmer for. Must be a valid snowball stemmer language.
	  * @param next The next object in the term pipeline
	  */
	protected SnowballStemmer(String StemLanguage, TermPipeline next)
	{
		StemLanguage = StemLanguage.toLowerCase();
		try{
			Class stemClass = Class.forName("org.tartarus.snowball.ext." + StemLanguage + "Stemmer");
			stemmer = (SnowballProgram) stemClass.newInstance();
			stemMethod = stemClass.getMethod("stem", new Class[0]);
		}catch(Exception e){
			System.err.println("ERROR: Cannot generate snowball stemmer "+StemLanguage+" : "+e);
			e.printStackTrace();
		}
		language = StemLanguage;
		this.next = next;
	}


	/**
	 * Stems the given term and passes onto the next object in the term pipeline.
	 * @param t String the term to stem.
	 */
	public void processTerm(String t)
	{
		if (t == null)
			return;
		next.processTerm(stem(t));
	}

	/** Stems the given term and returns the stem 
	  * @param term the term to be stemmed.
	  * @return the stemmed form of term */
	public String stem(String term) {
		stemmer.setCurrent(term);
		/* one can only imagine why a stemmer abstract class wouldn't
		   wouldn't have a stem() method. */
		try{
			stemMethod.invoke(stemmer, emptyArgs); //stemmer.stem();		
		}catch (Exception e) {
			System.err.println("ERROR: Cannot use snowball stemmer "+language+" : "+e);
			e.printStackTrace();
		}
		return stemmer.getCurrent();
	}
}



c'est le code de la classe tel qu'il a été défini par 'terrier'
mais comme on doit appliquer les methodes setCurrent et getCurrent à un objet de type SnowballStemmer, j'ai jugé utile de rajouté ces 2 methodes dans cette classe comme tel:

 public void setCurrent(String value)
        { courant=value;
        }

        public String getCurrent(){
            return courant;
        }



mais le probleme persiste, 'cannot find symbol'
0
bonsoir Miss, svp comment je peut telecharger l package uk.ac.gla.terrier.terms ?
donner moi un lien svp.
merci d'avance.
0
je viens d'echanger mon import "import uk.ac.gla.terrier.terms.SnowballStemmer;" contre "import terrier.SnowballStemmer;"
c'est vrai que je n'ai plus l'erreur "cannot find symbol" mais cette fois ci c'est un probleme de runtime
voilà ce que cela donne en output:

Exception in thread "main" java.lang.ClassCastException: org.tartarus.snowball.ext.frenchStemmer cannot be cast to terrier.SnowballStemmer
at lem.lem.lem(lem.java:33)
at lem.lem.main(lem.java:79)

à chaque fois que je veux echaper un probleme je retombe dans un autre encore pire
0
Chabanus Messages postés 978 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 11 novembre 2011 70
19 mai 2009 à 19:01
Tu dois mettre Logger.getRootLogger(); a l'interieur d'un constructeur ou d'une méthode et non en dehors !
0
sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
19 mai 2009 à 19:01
Erf
et pour la classe SnowballStemmer, son code est dans le package que j'ai téléchargé, je te donne son code: ==>

alors pourquoi importer
import uk.ac.gla.terrier.terms.SnowballStemmer;

dans ta class lem?

Sinon, euh, j'ai très faim en ce moment, faudra attendre un peu pour la suite :-p
0
c'est parce que ma classe 'lem' n'est pas dans le package 'terrier'
0
sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723 > miss
19 mai 2009 à 19:36
Tu es very very compliquée ^^

J'essaie de voir ce qui ne va pô via création de ton projet.

à plucheu
0
sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
19 mai 2009 à 19:02
Ah, je vois que tu as déjà répondu en partie avec ton post #14 :)
++
0
sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
19 mai 2009 à 19:40
Bon, il me manque des classes...

abstract public class SnowballStemmer implements TermPipeline { <==

où est-ce que je dois chopper ce truc (i.e., TermPipeline) ?
0
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);
}
0
meryeme > miss
29 janv. 2010 à 02:07
bonsoir Miss,
ewt ce que vous ouvez m'envoyer le lien qui permet de telecharger l API: uk.ac.gla.terrier.terms.
merci
0
sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
19 mai 2009 à 19:50
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.
0
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!
0