mit Objekt als Mutex in Java

8

Hallo Leute, ich brauche Hilfe.

Ich schreibe einen Musikplayer, der Musik aus dem Internet streamt. Wenn ich die Play-Taste drücken, bevor die Musik fertig gepuffert ist, möchte ich warten.

Ich habe versucht, so etwas zu tun:

%Vor%

Das Problem ist, dass der playButton nicht gedrückt wird, wenn% "co_de%" geworfen wird. Wie löst man normalerweise solche Probleme?

BEARBEITEN Um klarzustellen. Meine Frage ist: Wie mache ich den Button warten auf die "startStreaming" -Methode zu beenden?

    
Martin Hansen 19.05.2011, 18:40
quelle

7 Antworten

11

Laut JavaDoc

  

IllegalMonitorStateException wird ausgelöst   "um anzuzeigen, dass ein Thread hat   versucht auf das Objekt zu warten   überwachen oder andere Threads benachrichtigen   Warten auf dem Monitor eines Objekts ohne   Besitzer des angegebenen Monitors. "

Um mutex.wait() oder mutex.notify() aufzurufen, muss der aufrufende Thread eine Sperre für den Objekt-Mutex besitzen.

Diese Ausnahme wird ausgelöst, wenn Sie sie ohne vorangestelltes synchronized (mutex) { }

aufrufen

Sehen Sie sich die nette Animation von wait und notify in diesem Link an: Wie warten und benachrichtigen wirklich arbeiten?

    
Javascript is GOD 19.05.2011, 18:43
quelle
5

für wait (), notify () call, Sie benötigen einen synchronisierten Code. versuche das:

%Vor%     
Erhan Bagdemir 19.05.2011 18:47
quelle
4

Probieren Sie Semaphore mit 0 Anfangsgenehmigung aus . Semaphor mutex = neuer Semaphor (0);

in main mutex.release();

Klicken Sie auf mutex.acquire();

    
Nikita Beloglazov 19.05.2011 18:52
quelle
2

von Javadoc warte Diese Methode sollte nur von einem Thread aufgerufen werden, der der Besitzer des Monitors dieses Objekts ist und für benachrichtigen Diese Methode sollte nur von einem Thread aufgerufen werden, der der Besitzer des Monitors dieses Objekts ist.

Das bedeutet, dass Sie mit dem Mutex synchronisieren müssen, wenn Sie notify verwenden und warten

    
anfy2002us 19.05.2011 18:44
quelle
0

Du musst wait vor dir haben notify .

    
Charlie Martin 19.05.2011 18:43
quelle
0

Sie müssen auf dem Mutex synchronisieren, um notify anzurufen und zu warten

    
AdrianRM 19.05.2011 18:47
quelle
0

Sie können sich entweder komplexere Sperrobjekte ansehen oder einfach die Exception in einen try / catch-Block einfrieren. Das spätere ist definitiv "schnell und schmutzig".

Weitere Informationen zum Sperren von Objekten finden Sie in Ссылка

    
Taylor 19.05.2011 18:47
quelle