Update von swing-TableModels per Thread. Eins geht, das andere nicht, warum?

Collinwood

Mitglied
Hallo Ihr Lieben,

ich versuche mit diesem Thread 2 TableModels zu aktualisieren, was mir auch zur Hälfte super gelingt.
Anlass des ganzen war, dass ich festgestellt habe, dass mein eigentlicher Arbeitsthread zwar fertig läuft, jedoch die Tabellen sich dann nur per Klick in die Zellen aktualisieren lassen, und das finde ich, auch wenns ein Programm zur eigenen Verwendung werden soll, usability-technisch recht unschön.

So kam ich also dazu, für die regelmäßige Ausführung der fireTableDataChanged-Methode auf die Tabellenmodelle, eben auch einen eigenen Thread zu verwenden.

Die rechte Tabelle aktualisiert sich wunderschön, die mittlere irgendwie gar nicht.
Kennt sich da jemand aus, woran das liegen könnte? Ich hab es schon mit einer höheren Sleep-Zeit probiert (5 Sekunden), aber das hatte auch keine Auswirkungen.

Im folgenden der Code, und im Anhang ist in der Zip-Datei ein kleines fraps-Video und ein ordentlicher Screenshot, damit ihr auch seht, von was ich spreche. EDIT: Ok, irgendwie klappt das mit dem Hochladen nicht, obwohl ich deutlich unter 50 MB bleibe.
Das Paket habe ich jetzt hierhin hochgeladen: http://tok.keiler-land.de/tempfiles/paket.zip

Vielen Dank vorab für eure Hilfe!

Code:
package gui;

import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;

public class UpdaterThread extends Thread {

	private TableModel dtm;
	private TableModel dtm2;

	public UpdaterThread() {

	}

	public void run() {
		while (!Thread.interrupted()) {
			//System.out.println("updating gui...");
			if (this.dtm != null) {
				((AbstractTableModel) this.dtm).fireTableDataChanged();
				((AbstractTableModel) this.dtm2).fireTableDataChanged();
			}

			try {
				Thread.sleep(25);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	public TableModel getDtm() {
		return this.dtm;
	}

	public void setDtm(TableModel dtm) {
		this.dtm = dtm;
	}

	public TableModel getDtm2() {
		return this.dtm2;
	}

	public void setDtm2(TableModel dtm2) {
		this.dtm2 = dtm2;
	}
}

P.S. updater.start() wird gleich zu Beginn des Programms aufgerufen, und die beiden Setter rufe ich dann erstmalig auf, wenn die Tabellen überhaupt befüllt werden. Die Nullpointer-Exception verhindere ich ja mit der entsprechenden Abfrage.
 

Collinwood

Mitglied
Sorry, ich hab das mit den Unterforen erst hinterher gelesen. Kann bitte jemand der Moderatoren den Thread ins "swing"-Unterforum verschieben? Danke******