Threads jProgressBar update

K

Kyb2010

Gast
Hallo,
ich bin ein ziemlich unerfahren im Programmieren, ich sitze jetzt schon ewig an dieser Sache.
Ich will "eigentlich" nur einen einfachen Countdowntimer erstellen, desse Fortschritt durch ein jProgressBar angezeigt wird. Ich hab jezt schon viel gelesen aber bekomme es einfach nicht hin.
Erst wenn die schleife fertig ist springt die Progressbar auf 100.



Java:
public void countdown()
    {
       
        long ctime;
        ctime = System.currentTimeMillis();
        
        while(System.currentTimeMillis()-ctime <=5000)
        {
            float x =(float)(System.currentTimeMillis()-ctime);
            float count = x/5000*100;
           
            final int percent = (int) count +1 ;
            
            System.out.println(percent);
            
            SwingUtilities.invokeLater(new Runnable()
                    {
                        @Override
                        public void run()
                        {
                            jProgressBar2.setValue(percent);
                            
                        }
                    });  
        }
    }

Grüße
 
G

Gast2

Gast
Ein repaint() ist hier unnötig.

@TO:
Du rufst die countdown() vermutlich vom EDT aus auf. Verpacke den Aufruf in einen separaten Thread.
 
K

Kyb2010

Gast
Hey,
also ich hab die ganzen sachen die mir dazu eingefallen sind wie rapaint, revalidate etc... schon versucht.
Nach der Lektüre vieler Posts ist mir mehr oder weniger klar, dass ich den Timer in einem anderen thread laufen lassen muss oder so ähnlich. Ich hab aber keine Ahnung davon und bekomm das einfach nicht hin.
 

kaetzacoatl

Bekanntes Mitglied
Java:
public void run(){
		for(int i = 0;i <= 100;i++){
			jpb.setValue(i);
			long end = System.currentTimeMillis() + 1000;
			while(end > System.currentTimeMillis());
		}
	}
 
K

Kyb2010

Gast
Also irgendiwe komme ich nicht voran.
Ich habe ja in meinem code das mit der Runnable gemacht. der Timer soll starten indem ich auf einen Knopf drücke. Ich verstehe aber nicht, wo ich wann wie einen neuen Thread erzeuge und ihm die Runnable übergebe.
 
G

Gast2

Gast
Dann poste mal nen KSKB der dein Problem zeigt. Den zusätzlichen Thread kriegen wir dann schon da rein ;)
 

kaetzacoatl

Bekanntes Mitglied
Java:
new Thread(new Runnable(){
public void run(){
        for(int i = 0;i <= 100;i++){
            jpb.setValue(i);
            long end = System.currentTimeMillis() + 1000;
            while(end > System.currentTimeMillis());
        }
    }
).start();

Geht natürlich auch schöner, aber so dürfte es gehen.
 
K

Kyb2010

Gast
Also eigentlich hab ich einen button:

Java:
private void jButton7ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    

 }

Der soll die methode
Java:
 public void countdown()
    {
       
        long ctime;
        ctime = System.currentTimeMillis();
        
        while(System.currentTimeMillis()-ctime <=5000)
        {
            float x =(float)(System.currentTimeMillis()-ctime);
            float count = x/5000*100;
           
            final int percent = (int) count +1 ;
            this.percent = percent;
             System.out.println(percent);
             Thread thread = new Thread(new Runnable()
                  {
                      
                        public void run()
                       {
                          jProgressBar2.setValue(percent);
                        }
                    }); 
             
          thread.start();
        }
    }

Starten.
 

kaetzacoatl

Bekanntes Mitglied
public void run()
{
jProgressBar2.setValue(percent);
}

Durch:
Java:
public void run(){
        for(int i = 0;i <= 100;i++){
            jpb.setValue(i);
            long end = System.currentTimeMillis() + 1000;
            while(end > System.currentTimeMillis());
        }
    }
ersetzen!

Und das davor weglassen!
Denn das wird dann im EDT ausgeführt!
 
Zuletzt bearbeitet:

xehpuk

Top Contributor
kaetzacoatl, ich möchte dir nicht zu nahe treten, aber deine Beiträge zeigen, dass du es nicht wirklich besser weißt als der TE.

Java:
private void jButton7ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    jButton7.setEnabled(false);
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                countdown();
            } finally {
                SwingUtilities.invokeLater(new Runnable() {
                    @Override
                    public void run() {
                        jButton7.setEnabled(true):
                    }
                }
            }
        }
    }).start();
}

public void countdown() {
    long ctime = System.currentTimeMillis();
    
    while(System.currentTimeMillis() - ctime <= 5000) {
        float x = (float) (System.currentTimeMillis() - ctime);
        float count = x/5000*100;
        
        final int percent = (int) count +1 ;
        this.percent = percent;
        System.out.println(percent);
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                jProgressBar2.setValue(percent);
            }
        }
    }
}

In diese Richtung würde es gehen. Habe das jetzt in keiner IDE abgetippt oder genauer überprüft, also habt Erbarmen. :)
Code:
countdown()
würde ich bei diesem Code lieber
Code:
burndown()
nennen. Sie frisst nämlich für fünf Sekunden die maximale CPU-Zeit. Da gehört ein
Code:
Thread.sleep()
rein.
 
K

Kyb2010

Gast
vielen Dank, das funktioniert jetzt.
Eine Frage habe ich noch:

ist es möglich die Zeit der Methode als parameter zu übergeben, um sie variabel zu machen?
habs versucht aber kann von "innen" nicht auf die übergebenen attribute zugreifen.

.
 

Rubinum

Mitglied
Versuche es wirklich einfach mal mit dem SwingWorker. Dieser sorgt 100%ig dafür, dass dein herunterzählen in einem anderem Thread abläuft und du kannst zusätzlich noch Dinge angeben, die am Ende des Threads passieren sollen (.done()).

Hier nochmal die Doku:
How to Use Progress Bars (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)
und hier ist ein Quellcode, wo die dort beschriebene ProgressBar mit diesem SwingWorker benutzt wird: Java Tutorials Sample Code

Ich hab vieles auch rumprobiert, aber mit dem SwingWorker funktioniert es 100%ig, sofern du es ordentlich implementierst :).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Kapselung JProgressBar in JTable, aber getValueAt() greift nicht Java Basics - Anfänger-Themen 7
S Thread.sleep mit JProgressBar Java Basics - Anfänger-Themen 1
E jProgressbar, 6 Versuche, welche value angeben ? Java Basics - Anfänger-Themen 3
E jProgressBar auf 0 stellen Java Basics - Anfänger-Themen 1
E JProgressbar Java Basics - Anfänger-Themen 8
M JProgressBar wird nicht richtig angezeigt Java Basics - Anfänger-Themen 8
S JProgressbar mit individuellem Start/Endpunkt Java Basics - Anfänger-Themen 11
V Zugriff auf jProgressbar Java Basics - Anfänger-Themen 10
D jProgressBar soll bei 100% sein wenn sql Abfrage inkl. jTable schreiben fertig ist... Java Basics - Anfänger-Themen 5
S JProgressBar richtig anwenden Java Basics - Anfänger-Themen 27
N JProgressBar Java Basics - Anfänger-Themen 8
J JProgressBar - wird nicht geupdated Java Basics - Anfänger-Themen 3
H JProgressBar wird nicht aktualisiert Java Basics - Anfänger-Themen 7
S jProgressBar läuft nicht! Java Basics - Anfänger-Themen 13
H Aktualisierung des JProgressBar in Abhängigkeit eines Threads Java Basics - Anfänger-Themen 5
Y jprogressbar beenden? Java Basics - Anfänger-Themen 4
L JProgressBar für FileUpload Java Basics - Anfänger-Themen 3
B Pseudo JProgressBar Java Basics - Anfänger-Themen 3
G JProgressBar - XP style Java Basics - Anfänger-Themen 4
G JProgressBar während dem ausführen einer Funktion Java Basics - Anfänger-Themen 3
S jProgressBar Java Basics - Anfänger-Themen 3
G JProgressBar Java Basics - Anfänger-Themen 2
G JProgressBar#2 Java Basics - Anfänger-Themen 2
G JProgressBar Java Basics - Anfänger-Themen 7
G jProgressBar value aus anderer Klasse heraus verändern Java Basics - Anfänger-Themen 7
B jProgressBar mit while nicht for Java Basics - Anfänger-Themen 13
K JProgressbar, zur laufzeit steuern Java Basics - Anfänger-Themen 7
V JProgressBar anklickbar? Java Basics - Anfänger-Themen 2
A Timer + JProgressBar Java Basics - Anfänger-Themen 4
G in JProgressBar Fortschritt anzeigen Java Basics - Anfänger-Themen 8
P JDialog & JProgressBar Java Basics - Anfänger-Themen 2
Z Problem mit JProgressBar Java Basics - Anfänger-Themen 4
Mugetsu35 ArrayList Update ohne Index Java Basics - Anfänger-Themen 6
E Mysql Update wenn es nicht existiert insert Java Basics - Anfänger-Themen 14
G Konstruktor und update Java Basics - Anfänger-Themen 4
Henri Webservice Delete und Update Methode funktioniert nicht Java Basics - Anfänger-Themen 27
J Threads PrograssBar update während thread Java Basics - Anfänger-Themen 13
S Lost-Update Semaphore Java Basics - Anfänger-Themen 6
K Schlüsselworte Nach Java update findet mdb Datei nicht Java Basics - Anfänger-Themen 6
M Methodenaufruf über SQL UPDATE Java Basics - Anfänger-Themen 8
J JavaFX -> SocketIO -> Thread -> Update Label Java Basics - Anfänger-Themen 13
C JTable update mit MySQL Datenbank Java Basics - Anfänger-Themen 1
J fehler nach windows update Java Basics - Anfänger-Themen 44
Y Observer update Java Basics - Anfänger-Themen 3
G Threads Konstantes Update Java Basics - Anfänger-Themen 1
X Eventservice Probleme nach Update Java Basics - Anfänger-Themen 0
B VAriables update in for-Schelifen Java Basics - Anfänger-Themen 3
L Jar aus Jar Starten lassen (Update Tool) Java Basics - Anfänger-Themen 6
P Update System Java Basics - Anfänger-Themen 16
R Nach Ubuntu-Update: Konsole spuckt bei neu Kompilierten Programmen Fehler aus (BlueJ)(Ubuntu12.04) Java Basics - Anfänger-Themen 11
L Auf herunterfahren des PCs reagieren und Datensatz update machen Java Basics - Anfänger-Themen 15
Gugelhupf JDK installieren Fehlermeldung 1336 - Java SDK 7 Update 5 x64 Java Basics - Anfänger-Themen 4
A JDK installieren Java update - neu installieren? Java Basics - Anfänger-Themen 7
R JDK installieren Nach Update auf java 1.7 Connection refused Java Basics - Anfänger-Themen 9
E Programm - Update via Internet? Java Basics - Anfänger-Themen 5
B JDK installieren Java SE Development Kit 6 Update 25 Java Basics - Anfänger-Themen 5
M Update-Ticker... String in Textdatei schreiben und auslesen Java Basics - Anfänger-Themen 5
S MVC Prinzip - update() ? Java Basics - Anfänger-Themen 2
B Problem mit prepareStatement UPDATE Java Basics - Anfänger-Themen 2
M Serializable - Bei Update ältere Daten importieren Java Basics - Anfänger-Themen 14
C JAVA - Einstieg mit Eclipse - Update Sites und Ähnliches Java Basics - Anfänger-Themen 6
S JTree, Problem mit View Update Java Basics - Anfänger-Themen 2
L Java Persistence API - Update Befehl? Java Basics - Anfänger-Themen 5
hdi Fehler beim Model-Update einer JList (DefaultListModel) Java Basics - Anfänger-Themen 3
A update/draw schleife Java Basics - Anfänger-Themen 5
S update wird nicht aufgerufen Java Basics - Anfänger-Themen 9
G JFreeChart und das Update(was nicht klappt). Java Basics - Anfänger-Themen 3
A label update Java Basics - Anfänger-Themen 10
Y JDK 6 Update 5 with Java EE? Java Basics - Anfänger-Themen 2
M Java SQL-Update Java Basics - Anfänger-Themen 6
A per "update" ein Bild Strich für Strich "male Java Basics - Anfänger-Themen 9
S Ein Update System programmieren Java Basics - Anfänger-Themen 27
P Zeichenprogramm-->update() aushebeln Java Basics - Anfänger-Themen 11
S SQL UPDATE in Java "wie schreiben"? Java Basics - Anfänger-Themen 6
E Update JList Java Basics - Anfänger-Themen 13
J Problem bei Update auf Datenbank Java Basics - Anfänger-Themen 2
K Observer Observable update() . Java Basics - Anfänger-Themen 13
R JRE 1.5.0 Update 7 Install erkennt nicht Firefox/Netscape Java Basics - Anfänger-Themen 3
M [SOLVED]update() bei MVC Java Basics - Anfänger-Themen 4
M Datenbankabfrage mit UPDATE Java Basics - Anfänger-Themen 4
M Unterschied zwischen J2SE 5.0 Update x und J2SE 1.4.x Java Basics - Anfänger-Themen 4
N Array aus JCheckBox? 1000 if's UPDATE: Spaltennamen auslesen Java Basics - Anfänger-Themen 12
G Update auf Datenbankspalte vom Typ Timestamp mit aktu. Datum Java Basics - Anfänger-Themen 3
G Observable/Observer update wird nicht ausgeführt Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben