Hallo,
ich habe folgendes Problem:
in meiner GUI gibt es eine JList, deren Daten von mehreren Threads
immer wieder aktualisiert werden. Dazu übergeben diese Threads
Ihre Daten an ein Listenmodell "AbstractListModelImpl", das, wie der
Name schon sagt von "AbstractListModel" abgeleitet ist und die
Daten verwaltet/speichert.
Nun das Problem: immer wenn JList sich selbst neu zeichnen muss,
ruft es zunächst die methode "AbstractListModelImpl#getSize()"
auf, um die grösse der Liste zu ermitteln. Und gleich darauf
wird dann noch "AbstractListModelImpl#getElementAt(n)" mehrfach
aufgerufen (also so oft, wie es elemente in der liste gibt).
In dieser Zeit kann sich die Datenliste jedoch verändern,
sprich es kommen zwischenzeitlich neue Daten hinzu (geliefert
von den erwähnten nebenher laufenden Threads), sodass
JList nur die ursprünglich erfragten n Zeilen zeichnet.
Wie wird sowas normalerweise geregelt? Mir scheint der richtige
Weg zu sein, dass man die beiden Aufrufe von "getSize()" und
"getElementAt()" zusammenfasst und atomar macht, ich weiss
aber nicht wie das gehen soll.
Wäre super, wenn das jemand von euch wüsste
und mir helfen könnte.
ich habe folgendes Problem:
in meiner GUI gibt es eine JList, deren Daten von mehreren Threads
immer wieder aktualisiert werden. Dazu übergeben diese Threads
Ihre Daten an ein Listenmodell "AbstractListModelImpl", das, wie der
Name schon sagt von "AbstractListModel" abgeleitet ist und die
Daten verwaltet/speichert.
Nun das Problem: immer wenn JList sich selbst neu zeichnen muss,
ruft es zunächst die methode "AbstractListModelImpl#getSize()"
auf, um die grösse der Liste zu ermitteln. Und gleich darauf
wird dann noch "AbstractListModelImpl#getElementAt(n)" mehrfach
aufgerufen (also so oft, wie es elemente in der liste gibt).
In dieser Zeit kann sich die Datenliste jedoch verändern,
sprich es kommen zwischenzeitlich neue Daten hinzu (geliefert
von den erwähnten nebenher laufenden Threads), sodass
JList nur die ursprünglich erfragten n Zeilen zeichnet.
Wie wird sowas normalerweise geregelt? Mir scheint der richtige
Weg zu sein, dass man die beiden Aufrufe von "getSize()" und
"getElementAt()" zusammenfasst und atomar macht, ich weiss
aber nicht wie das gehen soll.
Wäre super, wenn das jemand von euch wüsste
und mir helfen könnte.