Hallo,
etwas kryptischer Titel.. Gegeben ist ein JFrame mit nem Table, der beim setVisible(true) des Frames noch keine Daten enthält. Danach werden Daten geaddet, und entsprechend immer ein fireTableDataChanged() aufgerufen (auf dem EDT).
Nun konnte ich folgendes beobachten: Sagen wir wir haben 1000 Datensätze, die eingelesen werden. Lass ich das voll durchrechnen, also ohne sleeps zwischen dem Lesen der einzelnen Datensätze (warum auch künstlich in die Länge ziehen?), dann ist das Frame beim Programm-Start ne knappe Sekunde leer. Also noch nicht gemalt, außer dem Rand und einer weißen Fläche. Nachdem alle Daten gelesen wurden, erscheint der Table usw.
...wenn ich jetzt zwischen den Datensätzen ein kurzes Sleep einbaue (2 ms reicht schon), dann ist der Table und alles beim Programmstart sofort da, und man sieht wie sich der Table füllt.
Ich erklär mir das so: Beim Einlesen der Daten wird 1000 mal geaddet, und 1000 mal fireTableDataChanged() aufgerufen. Aber der EDT bekommt scheinbar keine Rechenzeit zugewiesen?? Wenn ich in meiner Einlese-Schleife kurze Pausen mache, hat der EDT Zeit zum repainten.
...aber irgendwie kann das ja nicht sein!? Also muss man selber darauf achten dass der EDT genug Rechenzeit kriegt...? Dann müsste man ja irgendwie alle 200 Zeilen oder so nen sleep im Programm einbauen. Es macht ja keinen Unterschied ob ich in einer Schleife hänge oder einfach meine Programmlogik durch hundert Methoden läuft.
Die JVM hat doch da ein internes Scheduling, sodass der EDT auch regelmässig drankommt. So dachte ich zumindest. Aber wie erklärt man sich dann dieses Phänomen? Kann mich bitte jmd aufklären.. Danke!
lg
etwas kryptischer Titel.. Gegeben ist ein JFrame mit nem Table, der beim setVisible(true) des Frames noch keine Daten enthält. Danach werden Daten geaddet, und entsprechend immer ein fireTableDataChanged() aufgerufen (auf dem EDT).
Nun konnte ich folgendes beobachten: Sagen wir wir haben 1000 Datensätze, die eingelesen werden. Lass ich das voll durchrechnen, also ohne sleeps zwischen dem Lesen der einzelnen Datensätze (warum auch künstlich in die Länge ziehen?), dann ist das Frame beim Programm-Start ne knappe Sekunde leer. Also noch nicht gemalt, außer dem Rand und einer weißen Fläche. Nachdem alle Daten gelesen wurden, erscheint der Table usw.
...wenn ich jetzt zwischen den Datensätzen ein kurzes Sleep einbaue (2 ms reicht schon), dann ist der Table und alles beim Programmstart sofort da, und man sieht wie sich der Table füllt.
Ich erklär mir das so: Beim Einlesen der Daten wird 1000 mal geaddet, und 1000 mal fireTableDataChanged() aufgerufen. Aber der EDT bekommt scheinbar keine Rechenzeit zugewiesen?? Wenn ich in meiner Einlese-Schleife kurze Pausen mache, hat der EDT Zeit zum repainten.
...aber irgendwie kann das ja nicht sein!? Also muss man selber darauf achten dass der EDT genug Rechenzeit kriegt...? Dann müsste man ja irgendwie alle 200 Zeilen oder so nen sleep im Programm einbauen. Es macht ja keinen Unterschied ob ich in einer Schleife hänge oder einfach meine Programmlogik durch hundert Methoden läuft.
Die JVM hat doch da ein internes Scheduling, sodass der EDT auch regelmässig drankommt. So dachte ich zumindest. Aber wie erklärt man sich dann dieses Phänomen? Kann mich bitte jmd aufklären.. Danke!
lg
Zuletzt bearbeitet: