Probleme de JProgressBar

franckouze Messages postés 33 Date d'inscription lundi 15 avril 2002 Statut Membre Dernière intervention 11 juin 2003 - 1 mai 2003 à 21:31
kergro Messages postés 7 Date d'inscription mercredi 19 mai 2004 Statut Membre Dernière intervention 23 septembre 2005 - 15 sept. 2004 à 15:57
Salut a tous

comme le titre l'indique, j'ai un probleme avec une JProgressBar qui ne progresse pas.

Y a t il un champion ici qui pourrait regarder cette source et me dire ce qui ne va pas. Ca fait un moment que je galere dessus et je ne comprends vraiment pas pourquoi ma barre de progression n'avance pas en fonction des setValue()

je precise aussi que j'utilise comme JDK la 1.4.1 RC (la premiere 1.4.1 sortie)

merci

import java.awt.* ;
import javax.swing.* ;
import java.awt.event.* ;

public class TestProgress extends JFrame implements ActionListener {

private JProgressBar progressBar ;
private JButton button ;
private boolean end = false ;

public TestProgress() {
super( "JProgressBar test" ) ;
frameInit() ;
enableEvents( AWTEvent.WINDOW_EVENT_MASK ) ;

progressBar = new JProgressBar( 0 , 1000 ) ;
progressBar.setStringPainted( true ) ;
progressBar.setValue( 0 ) ;
button = new JButton( "Start" ) ;
button.addActionListener( this ) ;

Container content = getContentPane() ;
content.setLayout( new FlowLayout() ) ;
content.add( progressBar ) ;
content.add( button ) ;

addWindowListener(
new WindowAdapter() {
public void windowClosing( WindowEvent e ) {
System.exit( 0 ) ;
}
}
) ;

setLocation( 400 , 400 ) ;
pack() ;
setVisible( true ) ;

}

public void actionPerformed( ActionEvent e ) {
int min = progressBar.getMinimum() ;

if ( end ) {
progressBar.setValue( min ) ;
end = false ;
return ;
}

try {
int max = progressBar.getMaximum() ;
for ( int i = min ; i <= max ; i+=10 ) {
Thread.sleep( 100 ) ;
progressBar.setValue( i ) ;
}
} catch ( InterruptedException ex ) {
System.err.println( "Error : " + ex.getMessage() ) ;
ex.printStackTrace() ;
}

end = true ;
}

public static void main( String [] args ) {
new TestProgress() ;
}
}

5 réponses

CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
2 mai 2003 à 03:03
import java.awt.* ;
import javax.swing.* ;
import java.awt.event.* ;

public class TestProgress extends JFrame implements ActionListener {

public JProgressBar progressBar ;
private JButton button ;
private boolean end =  false ;

public TestProgress() {
super( "JProgressBar test" ) ;
frameInit() ;
setDefaultCloseOperation(EXIT_ON_CLOSE);

progressBar = new JProgressBar( 0 , 1000 ) ;
progressBar.setStringPainted( true ) ;
progressBar.setValue( 0 ) ;
button = new JButton( "Start" ) ;
button.addActionListener( this ) ;

Container content = getContentPane() ;
content.setLayout( new FlowLayout() ) ;
content.add( progressBar ) ;
content.add( button ) ;

setLocation( 400 , 400 ) ;
pack() ;
setVisible( true ) ;

}

public void actionPerformed( ActionEvent e ) {
final int min = progressBar.getMinimum() ;

if ( end ) {
progressBar.setValue( min ) ;
end = false ;
return ;
}
if( !running )
{
final TestProgress thisFrame= this;
new Thread(new Runnable()
{
  int minval= min;
  TestProgress mFrame= thisFrame;
  public void run()
  {
    mFrame.setRun();
try {
int max = mFrame.progressBar.getMaximum() ;
for ( int i = minval ; i <= max ; i+=10 ) {
Thread.sleep( 100 ) ;
mFrame.progressBar.setValue( i ) ;
}
} catch ( InterruptedException ex ) {
System.err.println( "Error : " + ex.getMessage() ) ;
ex.printStackTrace() ;
}
}
}).start();
}
}

private boolean running=false;

public void setRun()
{
 running= true; 
}

public void setEnd()
{
 end = true ;
 running= false; 
}

public static void main( String [] args ) {
new TestProgress() ;
}
}


Core Breaker :)
0
franckouze Messages postés 33 Date d'inscription lundi 15 avril 2002 Statut Membre Dernière intervention 11 juin 2003
5 mai 2003 à 14:38
salut et merci
ton exemple marche pas mal du tout mais pourrais tu m'expliquer pourquoi ca marche mieux en 'threadant' le travail de la scrollbar ?
0
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
5 mai 2003 à 15:53
C'est simple dans ton code initial (celui que tu as indique ici)
Le rafraichissement de l'interface graphique ne pouvais pas se faire tant que ta bouche qui faisait le setValue pour la progress bar, était active. Il falait paralléliser d'une part ce qui faisait le setValue tout en rendant la main à l'interface graphique pour ne pas brider le système qui la rafaichit.
De plus si toutes les autres actions (par exemple d'autre boutons dans l'interface) sont inhibés car tout le temps machine est occupé par cette fameuse boucle.

Core Breaker :)
0
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
5 mai 2003 à 15:55
C'est simple dans ton code initial (celui que tu as indique ici)
Le rafraichissement de l'interface graphique ne pouvais pas se faire tant que ta bouche qui faisait le setValue pour la progress bar, était active. Il falait paralléliser d'une part ce qui faisait le setValue tout en rendant la main à l'interface graphique pour ne pas brider le système qui la rafaichit.
De plus si toutes les autres actions (par exemple d'autre boutons dans l'interface) sont inhibés car tout le temps machine est occupé par cette fameuse boucle.

Core Breaker :)

Core Breaker :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kergro Messages postés 7 Date d'inscription mercredi 19 mai 2004 Statut Membre Dernière intervention 23 septembre 2005
15 sept. 2004 à 15:57
Salut, je pense avoir le même problème que franckouze, je cherche a executer des bat qui font des copies de fichiers et du zip, et je contrôle que les fichiers soient bien arrivé dans le repertoire de destination et je voudrai visualiser cette évolution avec une JProgressBar. Pour le moment elle affiche 0% et 100% Pourai tu me corriger mon codes car je ne comprends vraiment pas ce que tu as fait pour franckouze.

Merci ;
if(source == non)
{
     try
     {
           Runtime run = Runtime.getRuntime();
           run.exec( "delcle.bat");
    //    Thread.sleep(2000);
           run.exec( "sauve.bat" );
    //     run.halt(0);
           File repsource = new File("C:\\di0");
           File repdest = new File("E:\\test");
           String[] temp1 = new String[10000];
           String[] temp2 = new String[10000];
           File[] temp22;
           temp1 = repsource.list();
           temp2 = repdest.list();
           temp22 = repdest.listFiles();
           nbfichiers = temp22.length;
           int j = 0;
           current.setValue(0);
           for(j = 0; j < nbfichiers; j++)
           {
                      if(temp1[j].equals(temp2[j]))
                      {
                               try{Thread.sleep(1500);}catch(Exception e){}
                               current.setValue(num);
                               System.out.println(temp1[j]);
                               System.out.println(temp2[j]);
                               num = num + 100/nbfichiers;
                               current.setValue(num);
                       }
             }
             System.out.println("fini");
     }catch(Exception e){}
}
0
Rejoignez-nous