GUI (JTable) während Rekursion aktualisieren

Status
Nicht offen für weitere Antworten.

Javanator

Mitglied
Hallohallo leutchens (warum gibt es hier kein winkenden Smilie ???:L )

Ich arbeite mich gerade in Java ein, da ich es für mein Studium brauche.

also folgendes:

Ich möchte momentan das Damenproblem mithilfe eines JTable umsetzen.
Soweit so gut, alles funktioniert, bis auf die Ausgabe.

Code:
DefaultTableModel Dtm;
int i;
		String Data[][] = new String[count][]; //count ist ne konstante mit der Anzahl Damen
		for (i=0;i<Data.length;i++)
		{
			Data[i] = new String[count];//leerfeld erzeugen
		}
		
		String[] title = new String[count];
		
		Dtm = new DefaultTableModel(Data,title);

		JTable g = new JTable(Dtm);

soweit so gut.

nun Backtracke ich ein bissl umher, und möchte in jedem Schritt das JTable ausgeben.

also:
Code:
		Dtm.setValueAt("  X", row, col);
		Dtm.fireTableCellUpdated(row, col);

geht genausowenig wie:

Code:
		Dtm.setValueAt("  X", row, col);
		Dtm.fireTableDataChanged();

die Ausgabe erfolgt immer erst nach Rekursionsabbruch.

Nun arbeite ich schon seit > 4 Jahren mit Delphi und weiß das es da so was tolles wie
application.processmessages gibt, welche hintergrundthreads nach vorne kommen lassen so das diese ausgeführt werden. Beispielsweise die GUI ausgabe.

nun habe ich in Java kein äquivalent gefunden und frage so:
wie kann ich meine Ausgabe zur Laufzeit nach vorne kommen lassen?
 
Wahrscheinlich führst du deine Berechnungen im Event Dispatch Thread (der GUI Thread) aus? Wenn dem so ist, dann kann nichts gezeichnet werden, solange du noch rechnest. Die Berechnung muss in einen eigenen Thread.
 
ja momentan habe ich alles in einem Thread.

Das mit dem Thread habe ich schonmal gefunden, nun ist aber nur meine Frage:

Wenn ich in dem einen Thread rechne, woher weiß dann mein Gui Thread wann er aktualisieren muss?

bin da noch nicht so bewandert.

hast du vllt mal ein Beispiel indem einen Thread rechnet, und in dem anderen die Ausgabe geschieht?
 
Dein Thread braucht eine Referenz auf irgendetwas um seine Ergebnisse zurückzumelden.
Zum Beispiel dein TableModel. Dort veränderst du dann Werte (mit SwingUtilities#invokeLater) und sie werden direkt gezeichnet.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben