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 :

exception non levée malgré throw dans une boucle for


Sujet :

Langage Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 134
    Points : 57
    Points
    57
    Par défaut exception non levée malgré throw dans une boucle for
    Bonjour à tous,

    J'ai un petit souci qui me cause beaucoup, beaucoup d'ennui et surtout de bonnes crises d'énervements devant mon pc.
    Dans une boucle for qui parcours une arraylist je fais différents tests et agit en conséquence. Si un élément de la liste n'est pas déja intégrée dans une hashmap, je le met sinon je souhaite lever une exception que j'ai créé via une classe. Mais le souci c'est que cette exception n'est jamais levée malgré mon throw ! le plus curieux est que tout ce que je peux faire afficher avant la levée de l'exception dans le cas où elle doit être levée s'affiche correctement. Et en plus tout mon code après la levée de l'exception (qui n'a pas lieu) n'est pas éxecuté, comme si l'exception avait été correctement levée.
    Voici le bout de code qui me pose problème et tant de mystères :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    HashMap<TermeFonc, TermeFonc> sub=new HashMap<TermeFonc, TermeFonc>();
    						for(int i=0;i<arguments.size();i++){
    							if(!(sub.containsKey(arguments.get(i)))){
    								sub.put(arguments.get(i), tf.getArguments().get(i));
    							}else{
    								if(!(sub.get(arguments.get(i)).getSymbole().equals(tf.getArguments().get(i).getSymbole()))){
    									throw new FiltrageException("Règle 6 -> Echec !");
    								}
     
    							}
    						}
    En espérant avoir été assez claire !!

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 380
    Points : 480
    Points
    480
    Par défaut
    Bonjour,

    Sans approfondir le code, la méthode utilisée pour déclencher l'Exception est la bonne (si le code passe dans le if!).

    L'exception est peut être attrapée à un autre endroit?

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    Et en plus tout mon code après la levée de l'exception (qui n'a pas lieu) n'est pas éxecuté, comme si l'exception avait été correctement levée.
    Donc elle est bien levée. Si ce qui t'ennuie, c'est de ne pas la voir affichée dans la console, faut voir quel traitement tu réserve à cette exception lorsque tu la catche en amont.

  4. #4
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut
    Citation Envoyé par marion5515 Voir le message
    le plus curieux est que tout ce que je peux faire afficher avant la levée de l'exception dans le cas où elle doit être levée s'affiche correctement. Et en plus tout mon code après la levée de l'exception (qui n'a pas lieu) n'est pas éxecuté, comme si l'exception avait été correctement levée.
    Bonjour,

    Comment peux tu être sûr que l'exception n'est pas levée? La description citée ci dessus semble pourtant prouver qu'elle l'est bien.
    Comment as tu défini ta classe Exception? As tu utilisé des log dedans pour suivre la trace?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 134
    Points : 57
    Points
    57
    Par défaut
    En fait lors de la levée de cette exception je veux tout simplement afficher le texte mis en paramètre pour expliquer à l'utilisateur pourquoi cette exception et pourquoi le programme ne va pas plus loin. J'insiste pour que cela affiche l'exception tout simplement parce que j'ai deux autres cas un peu plus haut dans ma fonction générale où l'exception est parfaitement levée et surtout j'ai le petit message qui me dit que l'exception est levée suivi du texte mis en paramètre.

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    on peux voir le try{} catch {} qui entoure le bloc ou "ça ne marche pas" ? Que fait tu pour afficher cette exception (les exceptions s'affichent pas par magie, elle remontent jusqu'au niveau où on les traite, c'est là qu'on décide de ce qu'on en fait.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 134
    Points : 57
    Points
    57
    Par défaut
    Voici le code qui attrape l'exception lors de sa levée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    try{
    	filtre=r.getTermeGauche().filtrage(this, new HashMap<TermeFonc, TermeFonc>(), new ArrayList<TermeFonc>(), r.getTermeDroit());
    }catch(FiltrageException fe){
    	System.out.println("Reecriture du terme "+this+" impossible !");
    	System.out.println(fe);
    }
    Ce qui explique que pour les 2 autres cas j'ai bien l'affichage de mon exception suite à sa levée. Le fait que je n'ai pas la phrase "Reecriture du terme impossible" me fait vraiment penser que aucune exception n'est attrapée et donc que l'exception n'a pas été levée pour le cas qui pose problème. En revanche, si dans le constructeur de mon exception je fais afficher un texte celui-ci apparaît correctement. Petite info en plus, si je fais donc apparaitre un petit message dans le constructeur de mon exception, lors de l'éxécution de la boucle for, ce message apparait plusieurs fois, mais si l'exception était levée correctement cela devrait apparître une seule fois et ne pas continuer, il me semble que ça reste le principe d'une exception.

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    on peut voir la méthode filtrage complete?

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 134
    Points : 57
    Points
    57
    Par défaut
    je vous ai envoyé le code en message privé !

  10. #10
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Citation Envoyé par marion5515 Voir le message
    je vous ai envoyé le code en message privé !
    Non, il faut poster ici. Les MP ne sont pas là pour obtenir des réponses aux questions techniques posées sur les forum
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 134
    Points : 57
    Points
    57
    Par défaut
    j'ai fais un test en levant une exception du type Exception et non FiltrageException et ça marche !!! je ne comprends vraiment pas pourquoi ça ne fonctionne pas avec mon exception FiltrageException !!

  12. #12
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    Citation Envoyé par marion5515 Voir le message
    j'ai fais un test en levant une exception du type Exception et non FiltrageException et ça marche !!! je ne comprends vraiment pas pourquoi ça ne fonctionne pas avec mon exception FiltrageException !!
    Ce qui prouve, comme on l'a déjà dit, que l'exception est levée. Il faut donc regarder ce que tu fait au niveau de ton catch(FiltrageException)


    Si je regarde le code que vous m'avez envoyé (et que vous auriez du poster sur le forum), j'y vois ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for(int i=0; i<res.size();i++){
    try{
    return filtrage(res.get(i),ensSub,sousTermesPossibles, regleDroite);
    }catch(FiltrageException fe){
    i++;
    }
    }
    Voilà donc ou est traitée votre FiltrageException (vous vous en servez pour sauter l'étape suivante de la boucle)

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 134
    Points : 57
    Points
    57
    Par défaut
    Effectivement c'est bien ici que c'était traité ! Je n'y avais pas du tout songé et je vous avoue que je ne me souviens plus pourquoi j'ai mis ça comme ça d'ailleurs ! Je vous remercie pour votre aide et dorénavant je posterai tout sur le forum commen demandé . Merci à tous !

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

Discussions similaires

  1. multi ouverture de la console dans une boucle for
    Par jamesleouf dans le forum C++
    Réponses: 2
    Dernier message: 16/03/2006, 21h26
  2. Shell - Erreur dans une boucle for
    Par claralavraie dans le forum Linux
    Réponses: 4
    Dernier message: 11/01/2006, 13h45
  3. Problème avec une DLL dans une boucle For
    Par BraDim dans le forum Langage
    Réponses: 5
    Dernier message: 20/09/2005, 12h22
  4. [batch] incrémentation dans une boucle for
    Par bart64 dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 08/09/2004, 20h05
  5. Réponses: 3
    Dernier message: 06/07/2004, 10h21

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