BusyAnzeige einblenden wenn Thread länger als 2sec blokiert?

  • Themenstarter Themenstarter java.jago
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
J

java.jago

Gast
Hi,

Ich will den Zugriff auf ein BufferedImage wenn es gerade von einem anderen Thread bearbeitet wird für den Swing-Thread blocken wenn dieser das BufferedImage benötigt. Anstatt die GUI zu freezen will ich eine Busy-Anzeige einblenden wenn der Swing-Thread länger als 2sec. nicht auf das BufferedImage zugreifen kann - und auch wieder ausblenden, wenn das BufferedImage wieder zugänglich ist?

Hat jemand ein minimales Code-Beispiel wo z.B. ein Thread ein BufferedImage für eine zufällige Anzahl von Sekunden in Beschlag nimmt, den Swing-Thread der es anzeigen will blockiert und dann besagte Busy-Anzeige einblendet bis es frei wird? Bin ein blutiger Anfänger und bin vor einiger Zeit von .Net zu Java gewechselt 🙂

Danke,
jago
 
Hmm, ich habe mir das Beispiel durchgelesen und auch schon vorher einen ähnlichen gelesen. Nur sind diese Sun-Java Tutorials immer so praxisfremd formuliert.

Was ist denn an meiner Definition des Problems unklar? Ich will mit dem Swing-Thread ein BufferedImage anzeigen. Es kann sein, dass das BufferedImage gerade von einem anderen Thread benutzt wird - also Finger weg bis dieser fertig ist. Bis dahin soll der Swing-Thread den User grafisch per Busy-Anzeige unterhalten. Scheint mir doch ein sehr generelles Problem zu sein, oder habe ich irgendetwas unvollständig erklärt?

Danke,
jago
 
Schreib' ein Beispielprogramm, wo du genau sagst "Hier soll gewartet werden". Dann wirst du merken, was daran alles unklar ist.
 
ich meine zu verstehen, was du machen willst. mein vorschlag wäre es, quasi eine semaphore einzubauen auf die alle threads zugreifen können. das ließe sich realisieren indem du eine klasse mit einer statischen boolschen variablen machst. diese wird von dem thread, welcher das bild unter umständen bearbeitet und dadurch nicht lesbar macht, gesetzt. wenn deine grafische anzeige auf das bild zugreifen will, frägt sie diese variable ab ob sie gesetzt ist. wenn nein, kannst du das bild anzeigen, wenn ja, wartest du aktiv. aktiv warten heißt, daß du alle paar millisekunden (50+) die variable abfrägst, bis sie wieder zurückgesetzt worden ist. dabei zählst du mit, wie lange du schon wartest. wenn die wartezeit dann > 2 sekunden ist, zeigst du einen entsprechenden dialog an.

diese lösungsmöglichkeit lässt sich natürlich noch ausbauen, dahingehend, daß die klasse mit der statischen variablen eine art warteschlange wird, also deinen anderen klassen/threads auch mitteilt, ob sie nun dran sind oder zuerst eine andere klasse/thread lesen darf. je nachdem, wer zuerst interesse am status des bildes angemeldet hat. also eine FIFO-liste.

ich denke/hoffe, daß damit jedenfalls dein problem gelöst sein sollte.

viel erfolg

wayne
 
Ich dachte zwar, dass jemand für sowas schon eine getestete Lösung hat - aber ich denke mal ich werde es dann so realisieren wie ihr vorgeschlagen habt.

Danke,
jago
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben