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 UncaughtExceptionHandler = problèmes ?


Sujet :

EDT/SwingWorker Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut SwingWorker et UncaughtExceptionHandler = problèmes ?
    Bonjour,

    Ce matin vous m'avez fais découvrir SwingWorker, je n'ai pas trainé à en coder un mais j'ai un petit problème avec les exceptions.
    Mon application possède un Thread.uncaughtExceptionHandler qui fonctionne correctement mais dans la méthode doInBackground de 'MonSwingWorker' si une execption se produit, 'MonExceptionHandler' ne la récupère pas..
    Pire rien ne s'affiche dans la console !

    J'ai exposé mon problème ici : http://www.developpez.net/forums/sho...d.php?t=491615

    Mais pour simplifier les choses au maximum j'ai simplifié mon code et vous le montre (il ne fonctionne toujours pas)
    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
     
    public class MonWorker extends SwingWorker {
      protected File doInBackground() throws IOException {	
        System.out.println("Throw exception..");
        throw new NullPointerException("plop");
      }
    }
     
    // Dans mon application
    public class MonApplication extends JFrame {
      public static void main(String[] args) {
        UncaughtExceptionHandler exceptionHandler = 
           Thread.new UncaughtExceptionHandler() {
           public void uncaughtException(Thread thread, final Throwable  throwable) {        
              throwable.printStackTrace();
           }
        }
        Thread.setDefaultUncaughtExceptionHandler(exceptionHandler);
      }
    }
    Savez-vous m'aider ? Merci

    Edit 1 : Pourtant en ajoutant un petit syso dans mon action et dans mon worker j'ai le même handler :
    INFO [AWT-EventQueue-0] be.me.actions.AbstractAction - Performing MonAction
    Worker : be.me.DefaultExceptionHandler@3e1bc8
    Action : be.me.DefaultExceptionHandler@3e1bc8
    Throw NullPointerException(plop).. <- class be.me.core.workers.MonWorker

  2. #2
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    Je crois que le SwingWorker va créer un nouveau thread dans lequel vas'effectuer l'appel à doInBackground.

    L'appel a setDefaultUncaughtExceptionHandler te permet d'associer un handler au thread courant.
    Donc, tu peux appeler cette méthode setDefaultUncaughtExceptionHandler au début de ta méthode doInBackground de manière à placer ton exception handler sur le thread créé par le SwingWorker.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Je pensais aussi mais non (voir mon édit dans le premier post) en plus, je devrais au moins avoir une StackTrace écrite par la JVM si mon handler n'était pas enregistré..

  4. #4
    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,


    C'est normal : les exceptions remonté par doInBackground() sont traité par la classe SwingWorker et ne tues donc pas le thread (du coup le handler ne les traitent pas).

    L'exception est ensuite renvoyé par la méthode get() du SwingWorker en tant que source d'une ExecutionException...

    a++

  5. #5
    Invité
    Invité(e)
    Par défaut
    Ha. Ou à tu vu cette information ?

    Je suis donc obligé de faire un get() mais ou ? Pas dans mon action sinon elle bloque mon edt et le SwingWorker ne sers à rien.

    Si l'exception ne tue pas mon Thread.. il se termineras quand ?

  6. #6
    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
    Citation Envoyé par Blaise1 Voir le message
    Ha. Ou à tu vu cette information ?
    Ce doit surement être indiqué quelque part dans la doc...

    Citation Envoyé par Blaise1 Voir le message
    Je suis donc obligé de faire un get() mais ou ? Pas dans mon action sinon elle bloque mon edt et le SwingWorker ne sers à rien.
    En général le get() est fait dans la méthode done()... mais cela dépend surtout de l'objectif de ton SwingWorker.

    Citation Envoyé par Blaise1 Voir le message
    Si l'exception ne tue pas mon Thread.. il se termineras quand ?
    Elle ne le tue pas directement, mais comme le thread ne fait qu'exécuter la méthode doInbackground(), lorsque cette dernière remonte une exception elle est catché (pour être stocké) et le thread se termine de lui même proprement...

    a++

Discussions similaires

  1. Problème accès à un objet depuis un SwingWorker
    Par mrboliboli dans le forum EDT/SwingWorker
    Réponses: 6
    Dernier message: 24/04/2015, 15h50
  2. SwingWorker problème d'affichage [EDT] Classe de téléchargement
    Par peofofo dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 09/07/2012, 16h30
  3. swingWorker avec MVC, problème organisation
    Par marion5515 dans le forum EDT/SwingWorker
    Réponses: 0
    Dernier message: 08/11/2009, 19h53
  4. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18
  5. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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