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

API standards et tierces Java Discussion :

Methode run de la classe SwingWorker


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 209
    Par défaut Methode run de la classe SwingWorker
    Bonjour
    Je ne comprend pas la façon d'utiliser la méthode run() de la classe SwingWorker
    Lorsque l'on veut exécuter une fache dans un thread autre que l'EDT on appelle la méthode execute() de l'objet qui étend la classe SwingWorker cette méthode appelle a son tour la méthode doInBackground()

    Mais lorsque l'on appelle la méthode run() que ce passe-t-il ? quelle méthode est ensuite appelée et dans quel thread elle s'exécute ????
    Merci de bien vouloir m'éclairer sur ce sujet

  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,


    La méthode run() correspond au code de traitement du SwingWorker. En gros elle lance la méthode doInBackground() dans le thread courant, puis done() dans l'EDT à la fin du traitement Il ne faut pas l'utiliser directement.


    En fait lorsque tu lances execute(), cela passe le SwingWorker à un pool de thread qui va exécuter la méthode run() dans un thread, afin que le traitement de doInBackground() soit bien effectué dans un autre thread.

    Par défaut le pool est limité à 10 threads, mais tu peux très bien utiliser ton propre pool de thread :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	SwingWorker<?, ?> sw = ...
     
    	ExecutorService executor = Executors.newFixedThreadPool(2);
     
    	executor.execute(sw); // lance le swingworker dans un autre thread, via sa méthode run()

    Je ne sais pas si c'est très clair ?

    a++

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 209
    Par défaut
    Merci
    C'est bien ce que je pensais mais la doc de sun sur ce sujet n'est pas très clair Cette méthode est utilisée dans un exemple de sun qui traite de l'impression d'un document soit en arrière plan / soit dans le thread courant en l'occurence pour cette démo dans l'EDT ce qui bloque l'interface ( effectivement a ne pas utiliser)
    A+ pour d'autre questions

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

Discussions similaires

  1. Utiliser une methode d'une même classe
    Par Flamby69 dans le forum C++
    Réponses: 4
    Dernier message: 11/11/2006, 18h14
  2. [DEBUTANT]methode manquante dans ma classe ?
    Par Battosaiii dans le forum Débuter
    Réponses: 3
    Dernier message: 25/08/2006, 11h56
  3. Réponses: 2
    Dernier message: 02/05/2006, 14h34
  4. methode pour exécuter une class dans un jar
    Par yann_p dans le forum Langage
    Réponses: 2
    Dernier message: 18/04/2006, 17h47
  5. [Template] methode template d'une classe pas template
    Par bigquick dans le forum Langage
    Réponses: 8
    Dernier message: 25/03/2005, 15h09

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