2010-12-10 10 views
1

ich implementieren einen Timer ein Fortschrittsbalken laufen wie folgtProblem mit Hilfe eines Timers progressbar aktualisieren

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); 

       } 
      }; 

     } 

, was geschieht, wenn ich auf eine Schaltfläche namens Upload geklickt haben, führte es Aktion in der Klasse jbutton_proceed_action. Die Methode namens doUpload Daten in eine Datenbank hochladen, die dauert nur 2 Minuten bis zum Ende. Mein Problem war, obwohl ich den Timer vor dem Aufruf von doUpload gestartet habe. Die Methode progressbar startet nicht, bis die Methode "upload" beendet ist. Kann mir jemand helfen, dieses Problem zu lösen.

Ich brauche die prgressbar bedeuten laufen, während die Uplod

Antwort

2

ausführen Es ist, weil doUpload auf der Swing (UI) EDT (Event Dispatch Thread) und blockiert es läuft. Die Verwendung von SwingWorker ist eine Möglichkeit, die langwierige Aufgabe zu bewältigen und trotzdem nett zu spielen. Stellen Sie sicher, dass alle UI-Updates/Manipulationen nur aus dem EDT passiert - der vorherige Link (zum SwingWorker-Trail) enthält die Details.

Verwandte Themen