Exception

Résolu/Fermé
remousse Messages postés 299 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 20 novembre 2014 - 10 avril 2013 à 10:07
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 10 avril 2013 à 19:11
Bonjour,

J'ai une méthode Java qui throws une exception. A l'intérieur de celle-ci j'ai un bloc try catch.
J'aimerai que mon exécution puisse continue même si l'exception est rencontrée.

Voici mon code :

public MaClasse getInfo(final Requete request) throws MyException {
        
        final List<Test> list = request.getListe();

        for (final Test test : list) {
            do = false;
            appel = false;

            if (do) {
                try {
                    ......

                } catch (final MyException e) {
                    appel = true;
                    LOG.fatal("", e);
                } 
                if (appel) {
                    setCode(1);
                }
            }
        }

        ........
    }


En fait dans mon try si j'ai une MyException j'aimerai que l'exécution continue afin de faire le setCode(1).
Or cela ne fonctionne pas et le traitement s'arrête. Cela est surement du au throws mais je ne peux pas le retirer.

Avez-vous des idées ?

Par avance merci.

2 réponses

Chocobo_tofu1 Messages postés 162 Date d'inscription lundi 1 mars 2010 Statut Membre Dernière intervention 10 juillet 2014 362
10 avril 2013 à 10:15
c'est ton LOG.fatal("", e); ou ton code setCode(1)
qui doit générer une MyException,
vérifie que ton LOG.fatal("", e); se fait comme il faut
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
10 avril 2013 à 19:11
Il suffit de faire un try/catch autour du LOG.fatal, voire de carrément l'enlever s'il ne sert à rient, pour éviter d'avoir une exception dans le traitement de l'exception...

Remarque : "do" ne peux pas être un nom de variable, c'est un mot réservé du langage. Et si tu fais immédiatement se suivre une déclaration "do2=false" et "if(do2)" il n'y a aucune chance de rentrer dans le if....

De plus, si la seule utilité de "appel" est de faire ton traitement "setCode(1);" quand tu n'as pas eu d'exception, alors il vaut mieux mettre ton "setCode(1);" à la fin du try, vu que si il y a une exception il passera directement sur le catch.

Enfin, dernière remarque, à part si tu as besoin de "list" dans ton traitement, tu peux directement mettre ton "getListe" dans la boucle for, ça évite là encore une variable inutile.

public MaClasse getInfo(final Requete request) // throws MyException
{
    //final List<Test> list = request.getListe();
    
    //for (final Test test : list)
    for (final Test test : request.getListe())
    {
        //do2 = false;
        //appel = false;

        // if (do2)
        //{
            try
            {
                // ...
                
                setCode(1);
            }
            catch (final MyException e)
            {
                //appel = true;
                
                try
                {
                    LOG.fatal("", e);
                }
                catch (Throwable t)
                {
                    System.err.println(t);
                }
            }
            
            //if (appel)
            //{
            //    setCode(1);
            //}
        //}
    }
}
0