Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1536 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Progress Bar sous Java visual web

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Progress Bar sous Java visual web

n°1861745
s113809
Posté le 15-03-2009 à 14:25:21  profilanswer
 

Bonjour a tous,
 
j'ai une application visual web dans laquelle je voudrais introduire une progress Bar qui soit raffraichit a chaque nouvelle iteration d'un boucle for.
 
Utilisant netbeans 6.5, je drag & drop un objet Progress Bar de la palette, et dans le code Java de la page, j'inser les lignes :
 
progressBar1.setRefreshRate(100); // rafraichit toutes les 100 ms
// A l'interieur de la loop
progressBar1.setProgress( i );
 
Seulement la progress bar ne se raffraichit qu'une seule fois que le processus est termine, je n'ai donc que 2 etapes : 0% et 100%.
 
Je voudrais savoir comment faire pour rafrachir cette maudite progressBar.
J'ai lu dans des forum qu'on peut creer un "Thread" a part pour la progress bar,mais cela n'etait pas pour des application web.
 
Est ce que quelqu'un pourrait m'expliquer quelle serait la solution a mon probleme ?
 
 
Merci beaucoup.

mood
Publicité
Posté le 15-03-2009 à 14:25:21  profilanswer
 

n°1861841
anakin2haw​k
Posté le 15-03-2009 à 19:25:42  profilanswer
 

Pour ma part, je te conseille d'utiliser swingworker qui permet d'effectuer une tache en background et de rafraichir dans l'EDT(le thread ou se produise les evenements swing.)
 
Crée une classe extends JFrame qui contiendra la fenetre qui affiche la barre de progression et crée à l'intérieur une classe Task extends Swingworker qui fera le travaille que tu souhaite effectuer pendant ta tache.
 
Créer les deux fichiers java suivants. Le premier gère l'affichage graphique  
 
 
JUploadProgress.java

Code :
  1. import javax.swing.Box;
  2. import javax.swing.BoxLayout;
  3. import javax.swing.JDialog;
  4. import javax.swing.JPanel;
  5. import javax.swing.JProgressBar;
  6. import javax.swing.border.BevelBorder;
  7. import java.awt.Color;
  8. import java.awt.Dimension;
  9. public class JUploadProgress extends JDialog
  10. {
  11. protected JPanel p;
  12. protected JProgressBar progress;
  13. public JUploadProgress() {
  14.  super(); // Initialisation des principaux paramètres de la JDIALOD
  15.         this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
  16.         this.setTitle("Opération en cours" );
  17.         this.setSize(300, 170);
  18.         this.setResizable(false);
  19.         this.setBackground(Color.LIGHT_GRAY);
  20.         this.setLocationRelativeTo(null);
  21.        
  22.        
  23.         p = new JPanel(); // Création du panneau principal
  24.        
  25.      
  26.        
  27.         progress = new JProgressBar(); // Création et initialisation de la progress bar
  28.         progress.setStringPainted(true);
  29.         progress.setBorder(new BevelBorder(BevelBorder.LOWERED,Color.white, Color.gray));
  30.         progress.setMinimum(0);
  31.         progress.setMaximum(100);
  32.         progress.setValue(0);
  33.         progress.setSize(250, 10);
  34.        
  35.         p.setOpaque(true);
  36.         p.setLayout(new BoxLayout(p,BoxLayout.PAGE_AXIS));//On ajoute tous les composants (un sur chaque ligne)
  37.         p.add(Box.createRigidArea(new Dimension(0,10)));// les boites servent juste à la mise en page
  38.         p.add(progress);
  39.         p.add(Box.createRigidArea(new Dimension(0,10)));// les boites servent juste à la mise en page
  40.         this.getContentPane().add(p);
  41.        
  42.         this.setVisible(true);// on affiche la JDialog
  43.        
  44. }
  45. public void setProgressMax(final int max)
  46. /* methode qui permettent de mettre à jour la barre de progression depuis le fichier TacheAEffectuer*/
  47. {
  48.             progress.setMaximum(max);
  49. }
  50. public void setProgressValue(final int value)
  51. {
  52.  progress.setValue(value);
  53. }
  54. public void setProgressMin(final int min)
  55. {
  56.  progress.setMinimum(min);
  57.        
  58. }
  59. }


 
 
TacheAEffectuer.java

Code :
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import javax.swing.*;
  4. public class TacheAEffectuer {
  5.        
  6.     private JUploadProgress JU;// Fenetre qui apparaît pendant l'upload
  7.     private int i;
  8.     class Task extends SwingWorker<Void, Void> {
  9.         /*
  10.          * Main task. Executed in background thread.
  11.          */
  12.         @Override
  13.         public Void doInBackground()
  14.         {
  15.          SwingUtilities.invokeLater(new Runnable() { public void run()
  16.              {
  17.          JU.setProgressMax(100);// on prépare la JProgressBar
  18.                JU.setVisible(true);
  19.              }});
  20.          //Vous mettez ici votre code en utilisant Swing utilies pour mettre à jour la JprogressBar
  21.          for( i =0;i<100;i++)
  22.          {
  23.        
  24.           try {   // Ici je mets le thread en pose; c'est ici que vous mettrez le code que vous souhaitez exécuter
  25.     Thread.sleep(1000);
  26.    } catch (InterruptedException e) {
  27.     // TODO Auto-generated catch block
  28.     e.printStackTrace();
  29.    }
  30.    //On met à jour la valeur de la progress bar
  31.           SwingUtilities.invokeLater(new Runnable() { public void run()
  32.                     {
  33.             JU.setProgressValue(i);// on prépare la JProgressBar
  34.                          JU.setVisible(true);
  35.                     }});
  36.          }
  37.   return null;
  38.        
  39.         }
  40.         /*
  41.          * Executed in event dispatching thread
  42.          */
  43.         @Override
  44.         public void done() {
  45.             Toolkit.getDefaultToolkit().beep();
  46.            
  47.         }
  48.     }
  49.  
  50. /*****************************************************************/
  51. /******************************CONSTRUCTEUR***********************/
  52. /*****************************************************************/
  53.    
  54.    
  55.     public TacheAEffectuer(){
  56.        JU = new JUploadProgress();
  57.        JU.setVisible(true);
  58.      
  59.        Task task=new Task();
  60.        task.execute();
  61.     }
  62.  
  63. }


 
 
Dans ton programme principal invoque une tache a effectuer

Code :
  1. public class Programme {
  2. /**
  3.  * @param args
  4.  */
  5. public static void main(String[] args) {
  6.  // TODO Auto-generated method stub
  7.  TacheAEffectuer Tache=new TacheAEffectuer();
  8. }
  9. }

n°1926694
lataille
Posté le 25-09-2009 à 12:30:22  profilanswer
 

L'utilisation du SwingWorker est effectivement une bonne solution... Mais celà implique de savoir l'utiliser.
 
Dans le principe, l'exemple fourni est correct puisqu'il fait bien la distinction entre ce qui doit être effectué ou non dans le Thread EDT. Par contre cette utilisation n'apporte rien de plus à l'alternative de créer un nouveau Thread. Il est préférable d'utiliser les méthodes progress() et publish() qui se chargent d'effectuer les raffraichissement dans le Thread EDT.
 
Pour utiliser pleinement le SwingWorker, il faut dans ce cas précis :
 - le typer <Void,Integer>, car on passera des valeurs d'entiers à la progressBar
 - surcharger la méthode progress() pour raffraichir la progressBar
 - effectuer des appel à publish() pour poster les valeurs à raffraichir


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Progress Bar sous Java visual web

 

Sujets relatifs
Systeme de sécurité java 2[Windows/Visual C++] Erreur de link "GetTime et KillTimer"...
[Algo][Java] Appli de compta[help] Problème Visual C++
Serveur en java et eclipse : Probléme de lancementJava - Adobe Flex
Dessiner un terrain de basket-ball en JavaJava et multicoeur
Modifié une appliquation java[JAVA] Séries de "for" imbriqués avec conditions
Plus de sujets relatifs à : Progress Bar sous Java visual web


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR