# Frame repaint hat keine Wirkung



## Christoph74 (4. Mai 2009)

Hallo,

habe eine Schleife in einer Klasse.
in dieser Klasse wird ein Objekt einer anderen Klasse (=JFrame mit Progressbar / Statusmeldung) erstellt. 
Bei einem bestimmten Fortschritt der Schleife, rufe ich folgende Methode der Statusmeldung auf:

```
public void statusmeldung_updaten(int akt_pos)
	{
		
		jPGB_Fortschritt.setValue(akt_pos);	
		this.repaint();
	}
```

Dachte mir durch das repaint, sollte dann die Statusmeldung bzw. der JProgressBar den Fortschrtt anzeigen.
Leider erscheint zwar bei Ausführung der Frame, der Fortschritt wird jedoch nicht angezeigt (es wird gar nix angezeigt. Die Statusmeldung bleibt solange unverändert, als ob sie "hängt" da, bis die Schleife beendet ist).

Gibts da ne simple Lösung dafür, oder muss ich die Statusmeldung in einen eigenen Thread auslagern?

danke
christoph


----------



## SlaterB (4. Mai 2009)

siehe nebenan
http://www.java-forum.org/awt-swing...ungslos-wenn-danach-grosses-gemacht-wird.html


----------



## The_S (4. Mai 2009)

Thread auslagern. Gibts auch nen FAQ-Beitrag dazu.


----------



## Christoph74 (4. Mai 2009)

Danke...hab (ehrlich) die Suche ausführlich benutzt, aber irgendwie hab ich wohl andere Suchwortvorstellungen als andere...nochmals danke


----------



## Christoph74 (4. Mai 2009)

Saublöde Nachfrage noch:
Soll/Muss ich das ganze Objekt der Statusmeldung in den eigenen Thread verlagern oder reicht die Methode zum Updaten?


----------



## SlaterB (4. Mai 2009)

die update-Methode ist sicher kein Problem, dauert nur 1ms,
die Aktion, die so lange dauert, dass du überhaupt eine JProgressBar eingeführt hast, die ist das Problem,
die muss in einen eigenen Thread

und wenn man es ganz genau nimmt, müsste eigentlich die Aktualisierung der JProgrammbar, 
also der kurze setValue(akt_pos)-Aufruf, wiederum vom GUI-Thread ausgewführt werden,
dazu gibts SwingUtilities.invokeLater(), aber darüber kannst du später nachdenken


----------



## Ebenius (5. Mai 2009)

SlaterB hat gesagt.:


> und wenn man es ganz genau nimmt, müsste eigentlich die Aktualisierung der JProgrammbar,
> also der kurze setValue(akt_pos)-Aufruf, wiederum vom GUI-Thread ausgewführt werden,
> dazu gibts SwingUtilities.invokeLater(), aber darüber kannst du später nachdenken


Hier lohnt sich oft der SwingWorker. Siehe Sun Java Tutorial: Concurrency in Swing | Tasks that Have Interim Results.

Ebenius


----------

