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 dans ma JProgressBar


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de mobi_bil
    Profil pro
    Inscrit en
    Février 2009
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 242
    Par défaut Problème dans ma JProgressBar
    Bonjour à tous,
    J'ai créé un programme qui fait quelques traitements d'images et j'ai besoin d'utiliser une JProgressBar.
    Voici une partie du programme, regardez bien les trois lignes en rouge :

    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    public void CreeDescripteur(String filepath)
    	
    	{
    		int pr=0;
    		
    		try{
    	         
                BufferedReader buff1 = new BufferedReader(new FileReader(filepath));
                
                
                try {
                	
                	 String li;
                	while ((li = buff1.readLine()) != null) 
                	        pr++;
                		
                		
                }
                
                finally {
    
                    buff1.close();
                    }
    		}
    		
    		catch (IOException ioe) {
                
                System.out.println("Erreur --" + ioe.toString());
                }
    		
    	// la variable pr contient le nombre d'images à traiter	
    
    
    		
                try
                
                {
                	BufferedReader buff2 = new BufferedReader(new FileReader(filepath));
                
                  try {
                
                String line; 
                int j=0;
                BareProgress bp=new BareProgress(pr);
                while ((line = buff2.readLine()) != null) {
    
                try {
                    j++;
                    img=(ImageIO.read(new File(line)));
                    
                } catch (IOException ioe) {
                }
    		
    		
                Traitement();
    
                bp.majProgress((j*100)/pr);
    
                }
                }
                
                finally {
    
                    buff2.close();
                    }
                    } catch (IOException ioe) {
                     
                    System.out.println("Erreur --" + ioe.toString());
                    }
    
            
    	
    	
    	
    	}
    Voici la classe qui crée la bare de progression :

    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
     
       import java.awt.*;
       import java.awt.event.*;
     
       import javax.swing.*;
       import javax.swing.border.*;
       import java.io.*;
     
     
       public class BareProgress extends JFrame
     
      {
     
      public JProgressBar jpb = new JProgressBar(); 
      private JTextField jtfFrom = new JTextField();
      private JLabel jl=new JLabel();
     
      public BareProgress(int max) {
        JPanel jPanel2 = new JPanel();
        jPanel2.setLayout(new BorderLayout());
        jPanel2.setBorder(new TitledBorder("From"));
        jPanel2.add(jtfFrom, BorderLayout.CENTER);
        this.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
     
        JPanel jPanel1 = new JPanel();
        jPanel1.setLayout(new GridLayout(2, 1));
        jPanel1.add(jPanel2);
     
        this.add(jpb, BorderLayout.NORTH);
        this.add(jPanel1, BorderLayout.CENTER);
     
        jpb.setStringPainted(true); // Paint the percent in a string
        jpb.setMinimum(0);
        jpb.setMaximum(max);
     
        setTitle("CopyFile");
        setSize(300, 180);
        setVisible(true);
     
      }
    	public void majProgress (int val)
    	{		jpb.setValue (val);
     
    	}
     
      }
    Le problème est que je ne vois pas le changement dans la barre de progression dans le cas ou on passe d'un traitement à un autre.
    Merci pour votre aide.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Soit tu es occupé de faire tout ton travail dans l'EDT, ce qui fait que ton interface est givrée pendant ton traitement. Ta progress bar n'apparaitra donc que après.
    Soit tu es occupé d'afficher et de mettre a jour la progress bar en dehors de l'edt, et dans ce cas tu ne respecte pas les règles de java qui disent qu'on ne peut mettre à jour l'interface que dans l'EDT.

    Voir Qu'est ce que l'Event Dispatch Thread (EDT) ?
    Comment vérifier que l'on est bien dans l'EDT ?
    Comment exécuter un traitement plus tard dans l'EDT ?
    Comment lancer un traitement long ?
    Comment lancer un traitement dans l'EDT depuis une autre Thread ?
    Pourquoi ma barre de progression se remplit d'un coup ?

  3. #3
    Membre confirmé Avatar de mobi_bil
    Profil pro
    Inscrit en
    Février 2009
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 242
    Par défaut
    Bonjour tchize_,
    Soit tu es occupé de faire tout ton travail dans l'EDT, ce qui fait que ton interface est givrée pendant ton traitement. Ta progress bar n'apparaitra donc que après.
    Oui, c'est ça mon problème, est ce que vous pouvez corriger mon code ? merci.

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Tout est expliqué dans le FAQs mentionnées, merci de les lire.

  5. #5
    Membre confirmé Avatar de mobi_bil
    Profil pro
    Inscrit en
    Février 2009
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 242
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Tout est expliqué dans le FAQs mentionnées, merci de les lire.
    Merci, le problème c'est que je ne connais rien sur les threads, Est ce que vous connaissez un doc qui explique les threads ? merci pour votre aide.

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765

Discussions similaires

  1. Problème dans la déclaration de Winmain
    Par lvdnono dans le forum DirectX
    Réponses: 3
    Dernier message: 29/05/2004, 13h38
  2. problème dans l'hebergement
    Par Redouane dans le forum ASP
    Réponses: 9
    Dernier message: 31/12/2003, 23h34
  3. Quel est le problème dans ce code ?
    Par Luther13 dans le forum C
    Réponses: 12
    Dernier message: 26/08/2003, 16h09
  4. Problème dans analisys Manager
    Par ien_ien23 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 11/07/2003, 14h38
  5. Problème dans requête avec count()
    Par BadFox dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/07/2003, 18h02

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