mardi 2 juin 2015
Threads Threadprogrammierung wait() und notify()
Posted on 02:29 by verona
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):
Hauptthread (inklusive GUI):
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!
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:
-
for([Bilderiterator]){
-
hauptthread.setzeAktuellGeladeneBilder(i);
-
wait();
-
}
-
vorladeFunktionen();
-
}
Hauptthread (inklusive GUI):
Java Code:
-
onButtonClick(){
-
if(aktuellesBild+10 >= AktuellGeladeneBilder){
-
imageIconThread.notify();
-
}
-
}
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()
Categories: Threads Threadprogrammierung wait() und notify()
Inscription à :
Publier les commentaires (Atom)
0 commentaires:
Enregistrer un commentaire