Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme Exceptions

    16 avril 2009 à 19:49:33

    Bonjour tout le monde,
    J'ai un petit soucis avec les exceptions. J'ai fais un test sur le meme prototype que celui du tuto mais pour les chiens.
    Voici ma classe exception:
    public class ErreursException extends Exception {
    
        public void ErreursException() {
            System.out.println("c'est quoi ce chien zarb!!!");
        }
    
    /*  Ne pas regarder cette methode dans un premier temps  
        public String toString() {
            return "beurk!!!";
        }*/
    

    Voici le constructeur de ma classe chien:
    public Chien(String c, int p) throws ErreursException {
            if ( c.equals("bleu") )
                throw  new ErreursException() ;
            else{
            couleur=c;
            poids=p;
            }
    

    et voici mon main:
    public static void main(String[] args) {
            // TODO code application logic here
    
        Chien c=null;
     try{
        c = new Chien("bleu",300);
        }
     catch (ErreursException e) {
         e.printStackTrace();
            c=new Chien();
        }
        System.out.println(c.toString());
        c.crier();
        c.faireLeBeau();
    }
    


    quand je compile j'ai ceci:
    --sdzchien.ErreursException
    -- at sdzchien.Chien.<init>(Chien.java:25)
    -- at sdzchien.Main.main(Main.java:22)
    --sdzchien.Chien@1ad086a
    --Je criiiiiiiii
    --Je fais le beau

    et quand je rajoute la methode toString() à ma Classe ErreursException:
    --beurk!!!
    -- at sdzchien.Chien.<init>(Chien.java:25)
    -- at sdzchien.Main.main(Main.java:22)
    --sdzchien.Chien@12dacd1
    --Je criiiiiiiii
    --Je fais le beau

    Voila merci pour votre aide!
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      16 avril 2009 à 20:36:12

      tu lances volontairement une exception puis tu la catch, ça fait ce que ça doit faire, où est le problème?

      PS: ce code est horrible, et je pèse mes mots.
      • Partager sur Facebook
      • Partager sur Twitter
        16 avril 2009 à 20:38:21

        Bah oui ça marche, c'est normal, tu lances volontairement l'Exception.
        • Partager sur Facebook
        • Partager sur Twitter
          16 avril 2009 à 20:39:43

          Alors, il y a déjà une erreur dans ta classe exception, on ne mets pas de type de retour pour un constructeur (puisqu'il c'est l'objet lui même qui est retourné).

          Donc tu peux déjà changer :
          public class ErreursException extends Exception {
          
              public void ErreursException() {
                  System.out.println("c'est quoi ce chien zarb!!!");
              }
          
          /*  Ne pas regarder cette methode dans un premier temps  
              public String toString() {
                  return "beurk!!!";
              }*/
          

          en
          public class ErreursException extends Exception {
          
              public ErreursException() {
                  System.out.println("c'est quoi ce chien zarb!!!");
              }
          
          /*  Ne pas regarder cette methode dans un premier temps  
              public String toString() {
                  return "beurk!!!";
              }*/
          


          Ensuite, je ne vois pas pourquoi le constructeur devrait écrire sur le flux de sortie standard (il n'a rien a faire le constructeur). Ensuite, il faut aussi pensé à faire appel à la classe mère, donc la première ligne devrait être super()
          Ce a quoi je rajoute que le constructeur de la classe mère (à savoir Exception prend en argument un String représentant une description de l'erreur).


          Ensuite, dans ton main tu créé un chien bleu, donc l'exception est levée.
          Dans ton catch, tu print le stacktrace, ce qui est OK, mais après, tu créés un autre chien sans paramètres (or, du code que tu nous a montré, il n'y a pas de constructeur de chien qui ne possède pas de paramètres).


          EDIT :
          Le "beurk!!!" qui s'affiche vient du fait que printstacktrace affiche d'abord le message d'erreur (à savoir toString()), puis il affiche le stacktrace (les deux lignes suivantes)
          Essaie ça et ça devrait donner le même résultat :
          public class ErreursException extends Exception {
          
              public ErreursException(String message) {
                  super(message);
              }
          

          et lance l'exception en faisant : throw new ErreursException("beurk!!!") ; . Le résultat devrait être le même.
          • Partager sur Facebook
          • Partager sur Twitter
            16 avril 2009 à 21:04:50

            AAAAAAAAA qu'est qui fait là ce void!!! désolé c'est l'habitude.
            Merci sa marche tout bien !!!!
            Merci bcp pour votrre aide!!!

            Par contre je ne comprends le :
            ErreursException(String message){
            super(message)
            }
            


            Super appelle la Classe Exception et aprés qu'est ce qui ce passe?

            Par contre celui marche nikel:
            ErreursException(String message){
            System.out.println(message)
            }
            
            • Partager sur Facebook
            • Partager sur Twitter
              16 avril 2009 à 22:04:31

              Regarde dans le code de la classe Exception et tu verras bien ce qu'il se passe. En gros, ça sert à définir le message d'erreur récupérable par les méthodes standards.

              Un petit peu de lecture sur la javadoc ou un tuto sur les Exceptions et le tour est joué.
              • Partager sur Facebook
              • Partager sur Twitter
                16 avril 2009 à 22:52:35

                Bah j'ai pas compris, apres le super(message) on doit mettre quelque chose dans le main pôur voir afficher le message??
                • Partager sur Facebook
                • Partager sur Twitter
                  16 avril 2009 à 23:34:18

                  Bien sûr que non. Un message ne s'affiche pas lorsque tu construis l'Exception, mais lorsque tu demandes l'affichage (comme lors du printstacktrace() par exemple.

                  Essaie ton code avec les changement que j'ai montrer et tu devrais comprendre.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 avril 2009 à 11:22:12

                    D'accord sa marche effectivement. Par contre je comprends pas pourquooi j' ai cela comme reponse:

                    --run:
                    --sdzchien.ErreursException: c'est quoi ce chien zarb!!!
                    --Je criiiiiiiii
                    --at sdzchien.Chien.<init>(Chien.java:25)
                    --at sdzchien.Main.main(Main.java:24)

                    --Je fais le beau

                    La partie "je criiiiiii" devrait se situer apres les traces non?
                    Voici mon main:
                    public static void main(String[] args) {
                            // TODO code application logic here
                    
                       Chien c=null;
                     try{
                        c = new Chien("bleu",300);
                        }
                     catch (ErreursException e) {
                        // e.getMessage();
                         //System.out.println(e);
                        e.printStackTrace();
                            c=new Chien();
                     }
                        c.crier();
                    }
                    
                    • Partager sur Facebook
                    • Partager sur Twitter
                      17 avril 2009 à 12:02:35

                      Pas vraiment, sauf si je me trompe, ça se fait dans un nouveau thread, donc tout dépend quand le thread est interrompu. Si tu lance plusieurs fois, il est possible que cet ordre change.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        17 avril 2009 à 14:00:39

                        Ha voilà pourquoi j'ai parfois un ordre bizarre aussi.
                        Et, y'a pas moyen de déterminer l'ordre d'exécution des threads en plus je pense.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          18 avril 2009 à 13:10:07

                          Les threads?? c'est la pile d'execution s'est sa? je connais pas pour le moment merci ke meme!!
                          • Partager sur Facebook
                          • Partager sur Twitter
                            18 avril 2009 à 13:59:51

                            Ouais enfin j'aimerais bien une source pour cette affirmation, car Sun n'indique rien à ce sujet, donc à priori c'est faux.
                            Mais il est vrai que je n'ai pas encore d'explication à donner non plus à ce phénomène.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              18 avril 2009 à 17:37:18

                              Bah en attendant je peut toujours changer la priorité du Thread qui affiche les Exception pour qu'il me les affiches à la fin et plus n'importe ou.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                18 avril 2009 à 18:18:47

                                Euu une petite question toute bete: IOException et FileNotFoundException, sont liés non?
                                Dans la javadoc à Tree j'ai trouvé sa :
                                class java.io.IOException

                                * class java.io.CharConversionException
                                * class java.io.EOFException
                                * class java.io.FileNotFoundException

                                Cela signifie que FileNotFoundException herite de IOException?
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  18 avril 2009 à 19:39:00

                                  Bah, j'ai beau regarder dans IOException de la javadoc, je vois rien en se qui concerne FileNotFoundException.
                                  Par contre qd je code, et que je catch IOException et FileNotFoundException, il y a message sur ce second catch qui me dit que FileNotFound est deja géré.
                                  Alors je veux bien l'admettre, mais j'aimerais aussi le comprendre.
                                  Merci pour votre aide.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    18 avril 2009 à 19:55:33

                                    Et en ouvrant les yeux ça va peut-être mieux ? ^^

                                    Dans la classe java.io.IOException
                                    Image utilisateur

                                    ou dans la classe java.io.FileNotFoundException
                                    Image utilisateur


                                    [EDIT]
                                    Je le vois bien mais y'a un soucis avec la zForm ;) Si tu regardes mieux, je n'arrête pas d'éditer pour trouver une solution ;)
                                    C'est bon à priori j'ai retrouvé les bonnes adresses ^^'
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      18 avril 2009 à 19:57:40

                                      ok c'est quand assez bizarre je trouve car qd je remplace mes IO par des FileNotFound le compilateur me demande de rajouter IOException.
                                      Merci bcp pr l'aide
                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      Probleme Exceptions

                                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                      • Editeur
                                      • Markdown