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 :

Une cascade de SwingWorker


Sujet :

EDT/SwingWorker Java

  1. #1
    lvr
    lvr est déconnecté
    Membre extrêmement actif Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    909
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 909
    Points : 1 360
    Points
    1 360
    Par défaut Une cascade de SwingWorker
    Bonjour,
    Le bout de code sur lequel je travaille prévoit des traitements long ponctuées d'interactions avec l'utilisateur.
    Pour le moment je mets des SwingWorker en cascade.

    Dans le done() du 1er SwingWorker j'affiche une JOptionPane avec une question qui détermine la suite des opération, puis, toujours dans le done(), j'appelle un SwingWorker qui gère le traitement suivant. Et ainsi de suite.

    Est-ce la meilleure manière de procédéer, ou y a-t-il mieux ?

    Merci,

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    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 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Le but du swingWorker, c'est de mettre à jour une interface au cours du traitement, et de pouvoir déclencher des traitement longs depuis l'EDT. A te lire, t'es dans le cas inverse, donc le plus simple serait plutot



    du code
    SwingUtilities.invokeAndWait(JOPtionPane.show())
    du code
    SwingUtilities.invokeAndWait(JOPtionPane.show())
    du code
    SwingUtilities.invokeAndWait(JOPtionPane.show())
    etc.

    Pas besoin de Swingworkers imbirqués donc: un seul Thread qui, de temps en temps, fait appel à JOptionPane.

  3. #3
    lvr
    lvr est déconnecté
    Membre extrêmement actif Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    909
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 909
    Points : 1 360
    Points
    1 360
    Par défaut
    Mon point de départ est dans certains cas dans l'EDT (ex en réaction au click sur un bouton Open):
    En gros c'est
    1) EDT: open_actionPeformed -- ou -- non-EDT : démarrage application
    2) non-EDT : ouvrir l'objet (une petite db h2)
    3) EDT : ancien modèle, mettre à jour ?
    4) oui => non-EDT : mise à jour du modèle
    5) EDT : réactualisation du contenu ?
    6) oui => non-EDT : réactualisation du contenu

    Ce que tu proposes me semble bien fonctionner si le point de départ n'est pas dans l'EDT.
    Mais comme faire s'il y est ? Englober ton bout de code dans un Runnable ? Si on est dans l'EDT alors on passe via un new Thread(runnable) sinon on via directement runnable.run ?

    L'avantage du SwingWorker c'est qu'on peut aussi en suivre l'évolution, ce qui est peut-être réinventer la roue si on passe par un autre moyen...

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    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 481
    Points : 48 806
    Points
    48 806
    Par défaut
    ben tu met mon code dan

    private void bordelSansEdt()

    et dans le actionPerformed, tu met

    new Thread(){
    public void run(){
    bordelSansEdt();
    }
    }.start();


    tout simplement.

    Encore une fois, le Swingworker, ça sert pour les aller-retour EDT/temps de calcul, où l'EDT est notifié progressivement de l'avancement, comme une JTable que tu remplis progressivement, une barre de progression, etc. Dans le cas présent je ne vois pas l'intérêt

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

Discussions similaires

  1. [AC-2013] Optimisation d'une cascade de listes déroulantes
    Par rag83 dans le forum VBA Access
    Réponses: 28
    Dernier message: 01/02/2015, 18h43
  2. [XL-2007] Afficher résultat de 2 Textbox en fonction d'une cascade de 3 Combobox (UserForm)
    Par N00B1 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 25/06/2014, 15h51
  3. [XL-2003] Textbox se remplissant avec une cascade de combobox
    Par avenir80 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 18/12/2010, 17h54
  4. Problème de delete sur one-to-many avec une cascade
    Par Theoden dans le forum Hibernate
    Réponses: 2
    Dernier message: 02/01/2009, 17h43
  5. [DB2] Eviter une cascade infini dans un trigger
    Par Fatah93 dans le forum DB2
    Réponses: 2
    Dernier message: 25/04/2005, 14h23

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