Question

Je ne peux pas mettre à jour mon ... c'est progressbar mon code

Thread t=new Thread(new Runnable(){
        public void run(){
            int i=1;
            jProgBar.setMinimum(0);
            jProgBar.setMaximum(100);
            try {
                while(i<=100 || true){
                    jProgBar.setValue(i);
                    i++;
                    Thread.sleep(50);
                }
            }
            catch (InterruptedException ex){
                jProgBar.setValue(jProgBar.getMaximum());
            }
        }
    });
    t.start();

    .... Something code that correctly works

    t.interrupt();

L'état de la barre de progression est mis à jour qu'à la fin du fil. aider quelqu'un peut me ??

Était-ce utile?

La solution 5

Merci à tous. Je résolus de cette façon

try{
       jProgBar.setIndeterminate(true);
       jProgBar.setStringPainted(true);
       jProgBar.setBorderPainted(true);
       new Thread(new Runnable() {
           public void run() {
               ...
               // here is code that i've to wait
               // after this i stop my jProgressBar
               ...
               jProgBar.setStringPainted(false);
               jProgBar.setBorderPainted(true);
               jProgBar.setIndeterminate(false);
       }
       }).start();
   }
   catch(IllegalStateException ex){
       //some code
   }

Autres conseils

Avant le sommeil, ajoutez un appel à SwingUtilties.invokeLater () qui engendre un fil au feu un firePropertyChange sur la barre de progression dans le EDT.

Utilisez un modèle au lieu du JProgressBar directement:

DefaultBoundedRangeModel model = new DefaultBoundedRangeModel();
JProgressBar bar = new JProgressBar(model);

// Somewhere else, perhaps in another Thread
model.setValue(i)

L'exemple suivant fonctionne très bien:

public static void main(String[] args) throws InterruptedException {
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(200, 100);
    frame.setVisible(true);
    final DefaultBoundedRangeModel model = new DefaultBoundedRangeModel();
    frame.add(new JProgressBar(model));
    Thread t = new Thread(new Runnable() {
        public void run() {
            int i = 1;
            model.setMinimum(0);
            model.setMaximum(100);
            try {
                while (i <= 100 || true) {
                    model.setValue(i);
                    i++;
                    Thread.sleep(50);
                }
            } catch (InterruptedException ex) {
                model.setValue(model.getMaximum());
            }
        }
    });
    t.start();

    Thread.sleep(2000);

    t.interrupt();
}

Le meilleur conseil pour votre situation est d'utiliser SwingWorker . Consultez l'API http: //java.sun .com / JavaSE / 6 / docs / api / javax / Swing / SwingWorker.html

méthode remplacement de processus à la valeur de mise à jour de la barre de progression (il sera fait correctement HAE)

Plus d'informations peuvent être obtenues http: // java .sun.com / produits / JFC / tsc / articles / fils / threads2.html

Par eugener, SwingWorker est certainement ce que vous voulez être ici en utilisant, ou à tout moment une tâche longue est donné naissance qui pourrait autrement verrouiller votre interface graphique avant la fin. Un tutoriel complet sur l'utilisation des barres de progression avec SwingWorker est disponible à partir de Sun ^ H ^ H ^ HOracle ici:

http://java.sun.com/docs /books/tutorial/uiswing/components/progress.html

Mettre cet extrait

SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        jProgBar.repaint();
    }
}

Entre 'i ++' et 'Thread.sleep ()' devrait faire le travail. Pour le faire la compilation, la marque jProgBar comme « finale ».

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top