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

EDT/SwingWorker Java Discussion :

SwingWorker et Exception


Sujet :

EDT/SwingWorker Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2007
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Février 2007
    Messages : 80
    Par défaut SwingWorker et Exception
    Bonjour,

    Je ne sais pas comment gérer proprement les exceptions dans un SwingWorker. Je vous dis comment je fais et je soumets à vos critiques.

    Situation : j'exécute une tâche de fond qui throws ses Exceptions.
    Si aucune exception n'est levée pendant l'excécution de la tâche de fond je veux que s'exécute Action1 dans l'EDT, Action2 sinon.
    La méthode get() me renvoie les exceptions générées dans doInBackGround() donc je le met en début de la procédure done() avec un bloc try/catch

    Ca ressemble à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    class MonSwingWorker extends SwingWorker {
           @Override
           public Object doInBackground() throws Exception {
               // Execution d'une tâche qui fait remonter les exceptions.
               tache();
               return null;
           }
     
           @Override
           protected void done() {
               try {
                  // Appelle la méthode get() pour voir si une exception a été levée
                  get();
                  // Si pas d'exception => Action1 
                  Action1;
               } catch (Exception e) {
                      //Exception thrown => Action2
                      Action 2;
               }           
           }
       }
    Est-ce là une utilisation correcte du SwingWorker et des Exceptions ?
    Merci d'avance pour vos éclaircissments.

    Philippe.

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Cela me parait tout à fait correct !

    Perso je me suis même fait une classe fille qui gère tout cela et propose deux méthode onSuccess() et onFailure() à la place de done() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    public abstract class MySwingWorker<T, V> extends SwingWorker<T, V> {
     
    	/*
    	 * La méthode done() est final afin qu'elle ne soit pas redéfinie.
    	 * On implémentera plutôt les méthodes onSuccess() et onFailure()
    	 */
    	@Override
    	protected final void done() {
    		try {
    			onSuccess( get() );
    		} catch (InterruptedException e) {
    			onFailure(e);
    		} catch (ExecutionException e) {
    			onFailure(e.getCause());
    		}
    	}
     
    	/**
             * Méthode appelée dans l'EDT lorsque la tâche s'est terminé correctement.
             * @param result La valeur de retour de la méthode doInBackground()
             */
    	protected void onSuccess(T result) {
     
    	}
     
    	/**
             * Méthode appelée dans l'EDT lorsque la tâche a généré une exception.
             * @param result L'exception renvoyé par la méthode doInBackground()
             */
    	protected void onFailure(Throwable t) {
     
    	}
     
    }
    a++

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2007
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Février 2007
    Messages : 80
    Par défaut
    Bonjour,

    Merci pour ta réponse.
    Ca me plait, c'est bien clair et très propre avec ces deux méthodes onSuccess() et onFailure() ... adopté

    A +
    Merci. Philippe.

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

Discussions similaires

  1. Exception et SwingWorker
    Par mrboliboli dans le forum EDT/SwingWorker
    Réponses: 0
    Dernier message: 27/04/2015, 09h09
  2. SwingWorker / Exceptions / finished()
    Par SebastianPx dans le forum EDT/SwingWorker
    Réponses: 2
    Dernier message: 04/06/2009, 17h17
  3. Réponses: 3
    Dernier message: 01/11/2002, 14h30
  4. Réponses: 5
    Dernier message: 12/06/2002, 15h12
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

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