mardi 2 juin 2015

Threads Threadprogrammierung wait() und notify()

Hallo zusammen,

ich bin gerade dabei eine grafische Oberfläche zu programmieren, in der nacheinander 180 Bilder angezeigt werden. Der User kann wie bei der Windows Bildanzeige durch die einzelnen Bilder durchscrollen. Um nicht alle Bilder vorher laden zu müssen habe ich einen Thread erstellt, der die Bilder im Hintergrund läd. Jetzt möchte ich aber nicht, dass automatisch alle Bilder vorgeladen werden, sondern nur die nächsten zehn bezogen auf das Bild, welches sich der User gerade anschaut. Dazu habe ich mir die Funktionen wait() und notify() angeschaut, bin mir aber nicht sicher wie ich die in meinem Fall implementieren muss. Vereinfacht läuft folgendes ab:
Vorladethread (SwingWorker-Klasse):
Java Code:

  1. for([Bilderiterator]){
  2. if(aktuelles bild in main Thread + 10 <= i){
  3. hauptthread.setzeAktuellGeladeneBilder(i);
  4. wait();
  5. }
  6. vorladeFunktionen();
  7. }

Hauptthread (inklusive GUI):
Java Code:

  1. onButtonClick(){
  2. if(aktuellesBild+10 >= AktuellGeladeneBilder){
  3. imageIconThread.notify();
  4. }
  5. }


So bekomme ich eine IllegalMonitorStateException.
Ich habe bereits herausgefunden, dass ich etwas mit synchronized machen muss, aber da ich noch nie mit Threads gearbeitet habe, weiß ich nicht genau wie ich das in meinem Fall implementieren muss. Muss ich einen weiteren Thread erstellen, der dann den Ladethread aufruft? Wenn ja, wie benachrichtige ich diesen?

Vielen Dank!


Threads Threadprogrammierung wait() und notify()

0 commentaires:

Enregistrer un commentaire