# JList alle 20 Sekunden aktualisieren?



## 0001001 (6. Jun 2007)

Hallo Ihr,

könnt Ihr mir sagen wie ich eine JList alle 20 Sekunden aktualisiere? Und zwar ohne dass die GUI dabei eingefriert.
Ich habe ein DefaultListModel deren Inhalt sich laufend ändert. Dieses DefaultListModel wird der JList übergeben und diese zeigt den Inhalt an. Jetzt würde ich gerne die JList alle 20 Sekunden refreshen um somit das neue DefaultListModel zu laden.

Aber ich kann ja schlecht folgendes machen:

```
while(true){
			jList.setModel(defaultlistmodel);
			// wait 20 seconds
		}
```
Dann würde ja nur noch diese Schleife ausgeführt werden und die gesamte GUI würde einfrieren.
Also dachte ich an einen extra Thread, der die Aufgabe übernimmt. Also ungefähr so:


```
public class Updater implements Runnable{	
	private JList jList = null;
	public Updater(JList jList){
		this.jList = jList;
	}	
	public void run(){
		while(true){
			jList.setModel(defaultlistmodel);
			// wait 20 seconds
		}
	}
}
```

Aber so funktionierts leider auch nicht.
Habt ihr einen Vorschlag für mich?


----------



## muddin (6. Jun 2007)

Hi!
Nen Thread zu nehmen ist schon mal eine gute Idee 
Eigentlich müsste das so funktioneieren...wie startest du den Thread? Du rufst hoffentlich die start()-Methode auf und nicht run() ?


----------



## 0001001 (6. Jun 2007)

Den Thread würde ich schon richtig starten aber das kann doch gar nicht funktionieren. Ich übergebe ja an die Klasse Updater mein JList Objekt. Und mein Updater erstellt doch mit this.jList = jList; eine Kopie davon und führ die Änderungen auf der Kopie aus.


----------



## muddin (6. Jun 2007)

Da fällt mir grad was ein:
Musst du nicht jList.updateUI() aufrufen? Bringt ja nichts, wenn du immer wieder das defaultlistmodel setzt.
Hab ich virhin übersehen


----------



## muddin (6. Jun 2007)

0001001 hat gesagt.:
			
		

> Den Thread würde ich schon richtig starten aber das kann doch gar nicht funktionieren. Ich übergebe ja an die Klasse Updater mein JList Objekt. Und mein Updater erstellt doch mit this.jList = jList; eine Kopie davon und führ die Änderungen auf der Kopie aus.



Falsch - das ist keine kopie der JList, sondern eine Kopie der Referenz auf deine JList. Daher funktioniert das wohl, da die referenz immer noch auf deine JList zeigt


----------



## 0001001 (6. Jun 2007)

Danke, gut zu wissen. Jetzt funktioniert's auch. Hab jetzt einen TimerTask verwendet um den Thread alle 20 Sekunden ausführen zu  lassen.


----------



## muddin (6. Jun 2007)

Du benutzt einen Timer-Task um den Thread auführen zu lassen?? Naaa, das ist aber doppelt-gemoppelt..!
Starte den Thread und lass ihn nach jedem Update der jList 20Sek schlafen mit Thread.currentThread.sleep(20000);


----------



## AlArenal (6. Jun 2007)

GlazedLists???


----------



## 0001001 (6. Jun 2007)

muddin hat gesagt.:
			
		

> Du benutzt einen Timer-Task um den Thread auführen zu lassen?? Naaa, das ist aber doppelt-gemoppelt..!
> Starte den Thread und lass ihn nach jedem Update der jList 20Sek schlafen mit Thread.currentThread.sleep(20000);



Nene hab den Thread dann rausgemacht und nur den TimerTask verwendet.


----------

