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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    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
    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 chevronné
    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
    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
    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 : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    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 émérite 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
    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 confirmé
    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
    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
    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 : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    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 confirmé
    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
    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
    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 : 46
    Localisation : Belgique

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

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

+ 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