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

AWT/Swing Java Discussion :

[Problème] Threads et JProgressBar


Sujet :

AWT/Swing Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 147
    Points : 120
    Points
    120
    Par défaut [Problème] Threads et JProgressBar
    Bonjour,

    J'ai un JProgressBar qui doit se remplir en fonction des opérations effectuées, et non pas selon le temps, comme dans tout les exemples qu'on trouve sur le web.

    Voici la classe de ce 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    import java.awt.*; 
    import javax.swing.*; 
     
    public class ProgressBar{
    	JProgressBar jpbProgressBar;
    	Thread monThread;
    	JFrame fraFrame;
    	int intLimiteProgressBar = 0;
     
    	public void initcomponents(){
    		// Création de l'interface
    		fraFrame = new JFrame("En cours de chargement");
    		JPanel panneau = new JPanel();
    		JLabel texte = new JLabel("Veuillez patienter pendant le chargement...");
    		jpbProgressBar = new JProgressBar(0, 100); 
    		panneau.add("Center", jpbProgressBar); 
    		panneau.add("Center", texte); 
     
    		//Paramètre la fenêtre
    		fraFrame.getContentPane().add(BorderLayout.CENTER, panneau);
    		fraFrame.setSize(275,85);
    		fraFrame.setVisible(true);
    		fraFrame.setResizable(false);
    		fraFrame.setLocationRelativeTo(null);
    		fraFrame.setAlwaysOnTop(false);
     
    		// Création du thread
    		monThread= new Thread(new Avancer());
    	}//fin initcomponents
     
    	public void startprogressbar(int limite){
    		//Reprend la valeure en paramètre
    		intLimiteProgressBar = limite;
    		//Démarre le thread
    		monThread.start();
    	}//fin startprogressbar
     
    	public class Avancer implements Runnable{
    		public void run(){
    			jpbProgressBar.setValue(intLimiteProgressBar);
    		}//fin run
    	}//fin avancer
    }// fin ProgressBar
    J'appelle donc la méthode startprogressbar(int) pour faire avancer la barre. Cependant, la seconde fois que j'appelle cette méthode, ça ne fait pas avancer mon thread.
    Je suppose que c'est parce que j'essaie de le relancer une deuxième fois. Je ne l'ai pas arrêté car j'avais lu que on ne pouvais plus utiliser la méthode stop() des thread, et effectivement, ça ne marche pas chez moi.

    Mes questions sont donc :
    1) Quelle est la fonction pour mettre en pause un thread ?
    2) Mon algorithme est-il vraiment correct ? La façon dont j'utilise mon thread, le mettre en pause comme ça ? Les threads sont tout nouveaux pour moi alors peut-être que je me trompe sur leur utilisation.

    Merci d'avance à ceux qui prennent le temps de lire et peut-être même de répondre ^^

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 94
    Points : 102
    Points
    102
    Par défaut
    J'ai lu assez rapidement.

    Tu ne peux pas lancer plusieurs fois le même Thread c'est ça ton erreur soit tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new Thread(new Avancer().start();
    à chaque fois

    Soit tu fais en sortes que ton run() ne s'arrete pas et continue jusqu'à la fin de la barre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while(jpbProgressBar.getValue()<jpbProgressBar.getMaximum()){
    	jpbProgressBar.setValue(value);
           ...
    }
    Ceci dit si tu n'aime pas les threads tu n'es pas obligé d'en utiliser, tu pourrais tout simplement faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int avancement;
    makeAction1();
    avancement = avancement+x;
    jpbProgressBar.setvalue(avancement);
    makeAction2();
    avancement = avancement+x;
    jpbProgressBar.setvalue(avancement);
    ...

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 94
    Points : 102
    Points
    102
    Par défaut
    Sinon pour répondre à ta question 1) pour mettre un Thread en pause tu as sleep() pour un temps donné et yield() qui permet aux autres de s'éxécuter en multithread.
    ( Et d'autres moyens avec java.util.concurent pour le mutithread )
    Mais dans ton cas ton Thread est déja terminé il est fini dès qu'il touche à la fin de run()

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 147
    Points : 120
    Points
    120
    Par défaut
    J'utilise ma JProgressBar pour informer l'utilisateur de l'avancement des opérations. C'est pourquoi j'ai fait une méthode qui démarre mon thread pour faire avancer ma progressbar jusqu'à la valeur voulue.

    Exemple :
    instruction1;
    instruction2;
    startprogressbar(nom, 15); //Fait avancer ma progressbar jusqu'à 15%
    instruction3;
    instruction4;
    instruction5;
    startprogressbar(nom, 50); //Fait avancer ma progressbar jusqu'à 50%

    Comme me l'a fait remarquer Kikito, il n'est pas possible de démarrer plusieurs fois un thread.
    L'utilité de ces thread n'est elle pas très restreinte ? A chaque fois je vois des exemple ou on lance le thread et après on n'a plus aucun contrôle sur celui-ci. Ils fonctionnent tous avec des timers, mais moi j'ai besoin d'une progression en fonction des opérations.

    J'ai essayé d'utiliser sans thread, mais il n'affiche rien du tout jusqu'à la fin des mes opérations et une fois terminé il affiche l'état final.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 147
    Points : 120
    Points
    120
    Par défaut
    Personne n'a une petite idée ?

    Si mon problème n'est pas assez clair dites le moi.

  6. #6
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Si rien ne s'affiche c'est que tu utilises mal l'EDT...

    Un peu de lecture :


    a++

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 147
    Points : 120
    Points
    120
    Par défaut
    J'ai beau relire plusieurs fois, et faire des centaine d'essais, je n'arrive a rien

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

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, 11h29
  2. Problème thread et fonction récursive
    Par cryptorchild dans le forum Langage
    Réponses: 3
    Dernier message: 27/09/2006, 13h19
  3. Problème thread Boost
    Par TuRn3r dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 01/06/2006, 19h34
  4. Problème Thread et Scan de dossiers en C
    Par tptiben dans le forum Windows
    Réponses: 8
    Dernier message: 15/05/2006, 19h25
  5. Problème Thread
    Par Royd938 dans le forum Général Dotnet
    Réponses: 5
    Dernier message: 07/04/2006, 10h10

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