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 :

JProgressBar progression .


Sujet :

AWT/Swing Java

  1. #1
    Membre éclairé Avatar de miniil
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 267
    Par défaut JProgressBar progression .
    Bonjour (bonsoir),

    J'ai lu tous les post sur les JProgressBar mais je n'arrive pas à solutionner mon problème.

    Ma JProgressBar ne progresse pas. Elle devrait aller de 0 à 100% ce qui correspondrait à une incrémentation par 1 de 0 à environ 350 (-> Nombre que je définis au départ suivant le nombre d'enregistrement à traiter). Actuellement ma barre est à 0 au départ et quand le traitement se termine, elle affiche enfin 100% et est remplie.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ...
    jProgressBar1.setMinimum(0);
    jProgressBar1.setMaximum(contacts.length);
    jProgressBar1.setValue(0);
    jProgressBar1.repaint();    
    ...
    for (i = 0; i < contacts.length; i++)
    {
           jProgressBar1.setValue(jProgressBar1.getValue() + 1);                
           jProgressBar1.validate();
    ...
    }
    Ce code est lancé au départ de l'appui sur un bouton.

    Quelqu'un peut-il m'orienter?

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 20
    Par défaut
    Bonjoir ^^

    Peut-être faut-il que tu ajoutes jProgressBar1.repaint(); à l'intérieur de ta boucle for pour que ta barre de progression se remette à jour à chaque incrément (?)

    c'est juste une idée, rien de fondé.

    Courage !

  3. #3
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Citation Envoyé par miniil
    Bonjour (bonsoir),

    J'ai lu tous les post sur les JProgressBar mais je n'arrive pas à solutionner mon problème.

    Ma JProgressBar ne progresse pas. Elle devrait aller de 0 à 100% ce qui correspondrait à une incrémentation par 1 de 0 à environ 350 (-> Nombre que je définis au départ suivant le nombre d'enregistrement à traiter). Actuellement ma barre est à 0 au départ et quand le traitement se termine, elle affiche enfin 100% et est remplie.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ...
    jProgressBar1.setMinimum(0);
    jProgressBar1.setMaximum(contacts.length);
    jProgressBar1.setValue(0);
    jProgressBar1.repaint();    
    ...
    for (i = 0; i < contacts.length; i++)
    {
           jProgressBar1.setValue(jProgressBar1.getValue() + 1);                
           jProgressBar1.validate();
    ...
    }
    Ce code est lancé au départ de l'appui sur un bouton.

    Quelqu'un peut-il m'orienter?
    Quand tu fais des traitements long, il faut les faire dans des threads et appeller les fonctions d'affichages avec SwingUtilities.invokeLater, comme ca tu es sur que ton événement se passe dans l'EDT.

    Par contre, dans ton cas, c'est peut être que ton opération est trop rapide... Essaie de mettre un sleep dans la boucle pour voir ce que ca donne

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 897
    Billets dans le blog
    54
    Par défaut
    Citation Envoyé par miniil
    Ce code est lancé au départ de l'appui sur un bouton.
    Apparement c'est un traitement effectue dans l'EDT. Donc la progress bar ne se repeindra jamais tant que la tache n'est pas terminee. => faire une thread separee comme cela a ete precedement suggere.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  5. #5
    Membre expérimenté Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Par défaut
    Apparement c'est un traitement effectue dans l'EDT
    Euh une p'tite question de , c'est quoi l'EDT ?
    (Environnement De Travail ? , Extrêmement Dur à Tenter ? , Enhancement Dog Technology ? [ça tomberait bien, j'ai un yorkshire à customizer ] )

  6. #6
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    EDT: Event Dispatch Thread

    C'est lui qui gère l'interface graphique, ce qui explique par exemple que l'interface reste figée quand tu fait un traitement long dans un actionPerformed par exemple: l'EDT attend la fin du traitement pour sortir de la méthode.

    J'espère que c'est clair sinon n'hésite pas à poser des questions


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 288
    Par défaut
    Salut tout le monde !

    Voici une classe que j'avais écrite pour créer un objet barre de progression... regardes et inspires toi

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    import java.awt.event.*;
    import java.awt.*;
    import javax.swing.*;
     
    public class XrdIProgression
    {
    	JProgressBar progress;
    	Thread monThread;
    	int rappidite;
    	JFrame cadre;
     
    	public void go(int rappid)
    	{
    		rappidite=rappid;
     
    		// Interface
    		cadre = new JFrame("Loading");
     
    		JPanel panneau = new JPanel();
    		JLabel texte = new JLabel("Please wait...");
     
    		progress = new JProgressBar(0, 100);
     
    		panneau.add("Center", progress);
    		panneau.add("Center", texte);
     
    		cadre.getContentPane().add(BorderLayout.CENTER, panneau);
    		cadre.setSize(300,100);
    		Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();     // screen resolution
    		cadre.setLocation( (screen.width - cadre.getSize().width)/2, (screen.height - cadre.getSize().height)/2 );
    		cadre.setVisible(true);
    		cadre.setResizable(false);
    		cadre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		// thread creation
    		monThread= new Thread(new MonRunnable());
    		monThread.start();
     
    	}
     
    	public class MonRunnable  implements Runnable
    	{
    		public void run()
    		{
    			for (int j = 1; j < 100; j++) // running of the progress bar
    				{
    					progress.setValue(j);
    					try
    					{
    						monThread.sleep(rappidite);
    					}
    				catch(Exception e)
    					{
    						e.printStackTrace();
    					}
    				}
    				cadre.dispose(); // end of loading
    		}
    		}
    	}

  8. #8
    Membre expérimenté Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Par défaut
    EDT: Event Dispatch Thread
    J'aurais du m'en douter...
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

    Dur dur d'être une buse

  9. #9
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    Si ça peut te consoler moi non plus je ne m'étais pas rendu compte avec les erreurs, c'est en le lisant quelque part que j'ai compris.


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  10. #10
    Membre éclairé Avatar de miniil
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 267
    Par défaut
    Citation Envoyé par narsi1
    Bonjoir ^^

    Peut-être faut-il que tu ajoutes jProgressBar1.repaint(); à l'intérieur de ta boucle for pour que ta barre de progression se remette à jour à chaque incrément (?)

    c'est juste une idée, rien de fondé.

    Courage !
    Le repaint, j'avais essayé mais ça ne fonctionnait pas. C'est juste pour info.

    Je vais donc essayé ce soir cette histoire de thread mais j'avoue que je ne sais pas du tout comment m'y prendre

    Si quelqu'un pouvait m'expliquer clairement...
    Je dois créer un thread pour tout le traitement à effectuer? Y compris celui de la progression de la JProgressBar?

    Je vais regarder aussi de plus près cette histoire de EDT.

    Merci à tous pour toutes cos réponses

  11. #11
    Membre éclairé Avatar de miniil
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 267
    Par défaut
    Citation Envoyé par wichtounet
    Par contre, dans ton cas, c'est peut être que ton opération est trop rapide... Essaie de mettre un sleep dans la boucle pour voir ce que ca donne

    Je ne pense pas que les opérations soient trop rapides car il s'agit d'envoi d'email HTML et pour 350 destinataires ça prend déjà pas mal de temps, mais je pourrais essayer quand même merci.

  12. #12
    Membre éclairé Avatar de miniil
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 267
    Par défaut
    Citation Envoyé par dazz_x
    Euh une p'tite question de , c'est quoi l'EDT ?
    (Environnement De Travail ? , Extrêmement Dur à Tenter ? , Enhancement Dog Technology ? [ça tomberait bien, j'ai un yorkshire à customizer ] )
    Merci de l'avoir posé, ça m'a éviter de le faire

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


    Justement, les traitements long ne doivent pas être effectué dans l'EDT, mais tout ce qui concerne l'affichage doit y être exécuté (avec invokeLater()).

    Pourquoi ? Parce que le thread de l'EDT gère les évenements et l'affichage des composants. Si tu l'utilises pour d'autres traitements, il ne peut pas s'occuper de cela et ton interface reste figé et "buggé" (les autres boutons ne répondent pas, le fameux "carré gris"...).


    Le plus simple est d'utiliser la classe SwingWorker... mais il en existe plusieurs versions :
    • La première vient du tutoriel "How to use Threads" de Sun, et devrait fonctionner sur la plupart des version de Java.
    • La seconde est bien plus évolué car elle utilise les nouveauté de Java 5.0 (API de concurrence et Générics entre autre), et elle est du coups limité à Java 5.0 minimum : https://swingworker.dev.java.net/
    A noter que cette seconde version sera incluse dans Java 6 en standard...

    a++

Discussions similaires

  1. jProgressBar progression selon fonction
    Par otmaneo01 dans le forum Composants
    Réponses: 3
    Dernier message: 02/05/2015, 15h06
  2. jProgressBar ne progresse qu'a la fin du traitement
    Par lhpp dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 26/04/2007, 15h16
  3. Barre de progression JProgressBar
    Par sixkiller dans le forum Composants
    Réponses: 7
    Dernier message: 08/12/2004, 11h33
  4. [JProgressBar] Changer la couleur de progression
    Par loul91 dans le forum Composants
    Réponses: 2
    Dernier message: 19/07/2004, 16h10
  5. [Progress] Odbc
    Par NewB dans le forum Autres SGBD
    Réponses: 8
    Dernier message: 26/03/2003, 09h19

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