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 Thread et JProgressBar


Sujet :

EDT/SwingWorker Java

  1. #1
    Membre régulier Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 116
    Points
    116
    Par défaut SwingWorker Thread et JProgressBar
    Bonjour,

    Je souhaite afficher une barre de defilement JProgressBar qui indique le traitement de fichier en cours ( lecture de fichier .txt ).

    On m'a donc conseillé les threads et SwingWorker pour que l'interface graphique ne se fige pas et que ma barre de progression évolue en même temps que le traitement.

    Mais voilà je suis bloqué je voudrais savoir où est mon erreur car ma barre de progression ne s'affiche qu'à la fin de mon traitement :s

    J'ai donc deux threads différents :
    - Un thread pour la JProgressBar
    - Un thread pour le traitement de lecture ( le traitement long donc ... )

    je les apelle ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    	public void setRepertory(String reponse) throws IOException {
     
    		this.Repertory=reponse;//on definit le workspace
    		// il faut lire le répertoire
    		ThreadIG myThreadIG = new ThreadIG();		 
    		MonThread myThread = new MonThread(new Read(this,this.Repertory));
    		myThreadIG.setThread(myThread);
    		myThreadIG.construct();
    		myThread.run();
    		myThreadIG.interrupt();		
    	}                         // IL FAUT TUER LES THREADS comment on fait ? :)
    Déja est ce que j'apelle les threads de la bonne façon ? et comment je les kill ?

    voici le code de chacun des threads :

    Thread pour le traitement long :
    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
     
    public class MonThread extends Thread {
     
        Read MyRead= null; 
     
      public MonThread(Read r) {
    		MyRead=r;
      }
      public void run() {
    	try {
    		MyRead.Updating();
    	} catch (IOException e) {
    		// TODO Bloc catch auto-généré
    		e.printStackTrace();
    	} 
      }
    }
    Thread pour la progressBar :

    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
    public class ThreadIG extends SwingWorker {
        //...
     
    	MonThread t=null;
     
        public Object construct(){
     
    		MaProgressBar monTest = new MaProgressBar();
    			while(this.t.isAlive())
    			{			
    			  monTest.maBarre.setValue(/* il faut récupérer un indice qui indique		  
    			   *                          la progression du traitement...
    			   *  */1);
    			  Thread.yield();
    			}  
            return (Object)monTest;
        }
        //...
     
        public void setThread(MonThread t)
        {
        	this.t = t;
        }
    }
    Enfin voila où j'en suis j'aimerai vos avis et vos suggestions pour que cette JProgressBar avance

    Merciii
    .-*K.E.U.B*-.

  2. #2
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Utiliser à la fois des Threads et SwingWorker çà fait un peu beaucoup redondance....

    Utilise plutôt le doInBackground(...) du SwingWorker pour effectuer les tâches lourdes, à la place de mettre ce traitement dans des threads...
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  3. #3
    Membre régulier Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 116
    Points
    116
    Par défaut
    Citation Envoyé par sinok Voir le message
    Utiliser à la fois des Threads et SwingWorker çà fait un peu beaucoup redondance....

    Utilise plutôt le doInBackground(...) du SwingWorker pour effectuer les tâches lourdes, à la place de mettre ce traitement dans des threads...
    ok jregarde ca et jreviens dans quelques temps lol
    .-*K.E.U.B*-.

  4. #4
    Membre averti Avatar de let_me_in
    Inscrit en
    Mai 2005
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 441
    Points : 437
    Points
    437
    Par défaut
    salut,

    pourquoi tu ne passe pas ta JProgressBar a ta methode readFile, tu pourra ainsi augmenter sa valeur au fur et mesure que tu lise tes fichier, ou bien plus simple mets ça dans ta boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for(int i=0;i<count;i++)
    	{	
    	if(tab[i].isFile()){
    		this.readFile(tab[i]);
                     maProgressBar.setValue(100/(count-i));
                     }
    	}
    ça fait un peu bricolage mais ça devrait marcher.

    PS : coté conception, elle est vraiment nulle cette solution, mais on peut dire de même pour la tienne.
    qui dit Dieu n'existe pas dis que les programmes tournent sans processeur.

  5. #5
    Membre régulier Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 116
    Points
    116
    Par défaut
    voila ce que j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if(count!=0)
    				{
    					log.info.setText("");
    					log.addInfo("Le repertoire contient "+ count + " fichier(s) de log à analyser.");
    					canRead = true;	
    					File[] tab = repertoire.listFiles();		
     
    					MonThread t = new MonThread();
    					t.setParameters(log,tab,count,this,error);
    					t.construct();
     
     
     
    				}
    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
    35
    36
    37
    38
    39
    public class MonThread extends SwingWorker {
    	//...
     
    	public KeubLog log=null;
    	public File[] tab=null;
    	public int count=0;
    	public Read r;
    	public LinkedList e;
    	public Object construct(){
    		//Construction graphique...
    		return null;
    	}
    	//...
    	public Object doInBackground()
    	{
    		for(int i=0;i<count;i++)
    		{											
    			if(tab[i].isFile() && tab[i].getName().indexOf(".log")>0)
    				try {
    					r.readFile(tab[i]);
    				} catch (IOException e1) {					
    					e1.printStackTrace();
    				}
    			log.addInfo("Lecture effectué avec succes");
    			log.ConstruireArbre(e,tab[i].getName());							 
    		}	
    		return null;
    	}
     
    	public void setParameters(KeubLog log,File[] tab,int count,Read r, LinkedList e)
    	{
    		this.log=log;
    		this.tab=tab;
    		this.count=count;
    		this.r=r;
    		this.e=e;
    	}
     
    }

    comment execute t'on ce qui est dans la methode doInBackground(); ????
    .-*K.E.U.B*-.

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Lis au moins les liens qui te sont donnés !

    http://rom.developpez.com/java-swingworker/

  7. #7
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Il ne faut pas modifier la progress bar dans doInBackground(). Va lire la doc et regarde bien les méthodes publish() et process().
    Romain Guy
    Android - Mon livre - Mon blog

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 238
    Points : 267
    Points
    267
    Par défaut
    Citation Envoyé par Gfx Voir le message
    Il ne faut pas modifier la progress bar dans doInBackground(). Va lire la doc et regarde bien les méthodes publish() et process().
    +1, sinon les SwingWorker ne serviraient à pas grand chose, un Thread suffirait.

  9. #9
    Membre régulier Avatar de SpecialCharacter
    Inscrit en
    Mai 2007
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 73
    Points : 72
    Points
    72
    Par défaut
    Sans vouloir concurrencer GFX, ce tutoriel est également très bien fait et clair (en)http://java.sun.com/.../swingworker

Discussions similaires

  1. Problème de Thread et JProgressBar
    Par ptitdje dans le forum Général Java
    Réponses: 4
    Dernier message: 14/06/2012, 10h29
  2. Threads et JProgressBar
    Par begude dans le forum Général Java
    Réponses: 4
    Dernier message: 13/06/2012, 10h13
  3. Sockets, threads, et JProgressBar
    Par d0n32 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 09/02/2012, 10h44
  4. [SwingWorker] Thread.sleep(x) et done()
    Par SpecialCharacter dans le forum EDT/SwingWorker
    Réponses: 4
    Dernier message: 15/02/2008, 15h42
  5. [Problème] Threads et JProgressBar
    Par Bloodscalp dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 10/10/2006, 15h19

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