JProgressBar - wird nicht geupdated

Java4Life

Mitglied
Hi,

mir ist es schon fast peinlich diese Frage zu stellen, aber ich komme einfach nicht mit einer simplen JProgressBar klar bzw. verstehe ich das nicht:

1. ich habe eine Methode,die eine Datei von einer Inetseite lädt. Dabei wird eine Variable (in Prozent) errechnet.
Java:
public static void loadDataFromUrl(){
//
                        int bisher = 0;
			int zahll =1;
			while ((n = inputStream.read(tmp_buffer)) > 0) {
				fileOutput.write(tmp_buffer, 0, n);
				fileOutput.flush();
				
				bisher = bisher + n;
				erg = (bisher*100)/length;
			}
}

Die Variable erg wird auch richtig berechnet...Jetzt will ich diese Berechnung auf die JProgressBar übertragen (ich dachte das wäre einfach xD ).

Hier mal der Buttonlistener:
Java:
public static class btnDoAction implements ActionListener{
		public void actionPerformed (ActionEvent e){
			new Thread(new thread1()).start(); //Start the thread
			loadDataFromUrl();
		}
	}

Hier die Thread-Klasse:
Java:
	public static class thread1 implements Runnable{
		public void run(){
			while (erg < 101){
				barDo.setValue(erg); 
				System.out.println(erg);   //hier steht der richtige Wert drinne,aber warum   wird der nicht gesetzt!!!!!!!
				barDo.repaint();
			}
		}
	}

Was ich absolut nicht verstehe: Beim System.out sehe ich,dass die Werte von der ersten Methode erfolgreich übertragen und gesetzt werden...Aber warum zum Teufel bleibt die Bar leer und es wird NICHTS angezeigt bzw. aktualisiert.
Ich weiß,es gibt ein paar sehr gute Tutorials zur ProgressBar, aber ich wollte ein möglichst simples Beispiel anwenden, da ich es auch komisch finde,dass man für eine simple Bar erstmal 200 Zeilen Code schreiben muss ^^

Danke schon mal!
 
Zuletzt bearbeitet:
Ich kapiere es nicht. Im Thread (SWING != THREADSAFE) setzt du 101 mal hintereinander ungebremst den Wert erg, und lässt den Thread danach sterben. Was hattest du da vor?
 
Ich hatte vor,einen Thread laufen zu lassen, der ständig die ProgressBar updated. Und theoretisch dürfte er doch erst sterben, wenn der Download beendet ist (bei 100 % angekommen ist). Habe bestimmt einen extrem bescheuerten Denkfehler gemacht...

Aber es muss mich wohl jemand mit dem Kopf darauf stoßen.... =(


PS: Kann ich das so verstehen,dass zwar im Thread die Berechnungen stattfinden, aber die repaint() Methode so lange nicht in die GUI zeichnen kann, wie Methode 1 noch aktiv ist und dadurch die GUI gesperrt ist?
Würde auch erklären, warum er dann auf einmal die 100% zeichnet (da Methode 1 beendet wurdet).
 
Zuletzt bearbeitet:

Zurück
Oben