2010-12-10 8 views
1

J'ai mettre en œuvre une minuterie pour exécuter une barre de progression comme suitproblème avec l'utilisation d'une minuterie pour mettre à jour progressbar

public class UpdateOnline extends JInternalFrame { 

//UI related code goes here 

     class jbutton_proceed_action implements ActionListener { 

       public void actionPerformed(ActionEvent e) { 
        int result = -1; 
        Timer time = new Timer(50, updateBar); 
        time.start(); 
        result = doUpload("bulk"); 
       } 
      } 


     ActionListener updateBar = new ActionListener() { 

       public void actionPerformed(ActionEvent ae) { 
        int val = jProgressBar1.getValue(); 
        jProgressBar1.setValue(++val); 

       } 
      }; 

     } 

ce qui se passe est quand je clique sur un bouton appelé télécharger, il a exécuté une action en classe jbutton_proceed_action. La méthode appelée doUpload télécharger des données dans une base de données qui ne prend que 2 minutes pour terminer. Mon problème était eventhough j'ai commencé la minuterie avant d'appeler à la méthode doUpload la barre de progression ne commence pas à fonctionner jusqu'à ce que la méthode doUpload soit terminée. Quelqu'un peut-il m'aider à résoudre ce problème?

Je dois exécuter le prgressbar signifie alors que le uplod se produit

Répondre

2

C'est parce que doUpload est en cours d'exécution sur le Swing (UI) EDT (événement de fil d'expédition) et le bloquer. L'utilisation de SwingWorker est une façon de gérer la tâche de longue durée tout en restant agréable. Assurez-vous que toutes les mises à jour/manipulations d'interface utilisateur seulement se produisent à partir de l'EDT - le lien précédent (à la piste SwingWorker) contient les détails.

Questions connexes