IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

[Exceptions] Pb avec les exceptions


Sujet :

Langage Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 149
    Points : 93
    Points
    93
    Par défaut [Exceptions] Pb avec les exceptions
    Bonjour à tous,

    Je rencontre un pb avec les exceptions.
    J'ai une fonction
    [code]
    public static int chercher(string s) throws CleAbsente{
    if (//la cle est presente )
    {
    //traitement
    }
    else
    {
    throw new CleAbsente(s);
    }
    }
    [\code]
    J'aimerai creer une exception lorsque la cle est absente.
    Voici ma classe exception :

    [code]
    class CleAbsente
    string pb;

    CleAbsente(string s){
    pb:=s
    }

    }

    [/code]

    Or dans mon fichier test, j'appele la fonction System.out.print(t.chercher("c")).

    Et j'ai le message d'erreur suivant lors de l'execution :
    test_classe.java:10: unreported exception CleAbsenteException; must be caught or declared to be thrown.

    Qui pourrait m'aider...

    Merci d'avance.

  2. #2
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Toutes les erreurs potentielles (clause throws MonException) qui ne sont pas des sous-classes de RuntimeException doivent être entourées d'un bloc try/catch... Ce bloc sert à dire: OK, j'ai vu qu'une exception s'est produite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    try{
      t.chercher(s) ;
    }catch(CleAbsente e){
      e.printStackTrace();
    }

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 149
    Points : 93
    Points
    93
    Par défaut
    Cette instruction try et catch sont à mettre dans ma classe de test?

  4. #4
    Membre éprouvé
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Points : 935
    Points
    935
    Par défaut
    oui, autour du
    System.out.print(t.chercher("c")).

    car c'est là qu l'Exception peut apparaitre

  5. #5
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Citation Envoyé par mahef
    Cette instruction try et catch sont à mettre dans ma classe de test?
    bin pas forcément....

    elles seront nécessaire dès que tu fais appel à ta méthode "chercher"...

    en règle générale, toutes les erreurs renvoyées par une méthode doivent être try / catch -ées

    exemple ave une méthode m:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public static void m throws IOException, UneException, UneAutre(){}
    kan on l'appelle, il faut faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    try{
      m();
    }catch (IOException e){
      e.printStackTrace();
    }catch (UneException e){
      e.printStackTrace();
    }catch (UneAutre e){
      e.printStackTrace();
    }
    Les seules qui dérogent à la règle sont celles qui dérivent de RuntimeException (celles qui "extends RuntimeException")


    oki ?


  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 149
    Points : 93
    Points
    93
    Par défaut
    PAs tout à fais. Voici ma fonction chercher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
         public int chercher(String c)throws CleAbsenteException{
    	       return tab[indiceDeCle(c)].valeur;
        }
    Or je rencontre un pb comme par exemple,une cle trop importante.

    Dans mon fichier test, j'ai essaye de suivre ce que vous m'éavez dis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	try{
    	System.out.print(t.chercher("addbc"));
    			 }
    			 catch (CleAbsenteException e){
    			     System.out.print("ereur");
    			 }
    Or evidemment ca ne marche pas.

    ....

  7. #7
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    et bien, dans ta méthode, il doit y avoir certaines conditions qui déclencheront ton exception, par ex:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    // i doit être compris entre 0 et 100, sinon, déclenche exception
    pulic static void m(int i) throws UneException{
     
      if(i<0) throw new UneException("i ne doit pas etre negatif");
      if(i>100) throw new UneException("i ne doit pas plus grand que 100");
     
     
      // si on arrive jusqu'ici, tous les tests ont été validés
     
      System.out.println("i est compris entre 0 et 100: "+i); 
     
    }

  8. #8
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut


    précision:

    il faut bien faire la différence entre la clause "throws" et le mot clé "throw"

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 149
    Points : 93
    Points
    93
    Par défaut
    Merci beaucoup de ton aide. C'est beaucoup plus clair maintenant.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 149
    Points : 93
    Points
    93
    Par défaut
    Encore un p'tit pb. J'ai utiliser les exceptions, pour mon premier exemple ca marche nickel.
    Par contre, j'ai un autre souci :

    public void associer(String c, int v) throws SaturationException{
    if(indiceDeCle(c)>=taille_max) throw new SaturationException();
    }


    Et là j'ai le droit au message suivant :
    ./Table_de_correspondance.java:29: incompatible types
    found : SaturationException
    required: java.lang.Throwable
    public void associer(String c, int v) throws SaturationException{


    Si tu peux encore m'aider ...

  11. #11
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    ta classe Exception doit étendre une autre Exception

    change ta classe de la manière suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    class SaturationException extends RuntimeException{}
    je pense que ça devrait passer...

    sinon le problème est que Throwable est une super-interface, qui ne peut pas être implémentée dans une classe, mais juste dans une autre interface (ne me demande pas pourquoi, j'y ai rien compris...)


  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 149
    Points : 93
    Points
    93
    Par défaut
    C'est meix en effet. Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Bonnes pratiques avec les exceptions
    Par scougirou dans le forum Langage
    Réponses: 1
    Dernier message: 08/08/2007, 19h18
  2. Problème avec les exceptions
    Par shenron666 dans le forum Code::Blocks
    Réponses: 3
    Dernier message: 11/10/2006, 12h53
  3. Problème avec les exceptions
    Par Mucho dans le forum wxWidgets
    Réponses: 3
    Dernier message: 04/10/2006, 17h10
  4. probléme avec les exceptions
    Par sofiane44 dans le forum Langage
    Réponses: 1
    Dernier message: 10/01/2006, 16h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo