Events und Sleep?

JUserToto

Aktives Mitglied
Huhu,

ich habe ein kleine, generelle Frage. Ich kann mir aber irgendwie keine Antwort ergoogeln.

Und zwar habe ich eine Komponente, auf die man klicken kann. Dann wird ein Sound abgespielt. So lang, wie der Sound abgespielt wird, soll man nichts anderes machen können, deswegen berechne ich die Länge des Sounds und mache ein Thread.sleep.
Nun fällt mir auf, dass ich, während der Thread schläft trotzdem klicken kann. Der Klick wird irgendwie "zwischengespeichert" und wenn der Thread wieder aktiv ist, wird er verarbeitet und der Sound erklingt nochmal.
Werden die Events tatsächlich in eine Art Warteschlange versetzt, während der Thread schläft, oder liegt es womöglich an etwas anderem?

lg Toto
 
Hmja... Thread.sleep auf dem Thread, der sich auch um's GUI kümmert ist eigentlich schlecht. Wenn dort etwas gemacht wird, das länger dauert, sollte das in einem eigenen Thread passieren. Das würde natürlich nicht verhindern, dass man z.B. den Button mehrfach klingt, aber das ist in gewissen Grenzen ja unabhängig davon: Du könntest am Anfang, bevor der sound losgeht, button.setEnabled(false); machen, und am Ende button.setEnabled(true);. Das ganze am besten mit einem SwingWorker, schau dir die Klasse mal an.
 
Hallo,

dankeschön. Ich habe es mittlerweile zum eigenen Thread gemacht. Ursprünglich war es auch ein eigener Thread, ich glaube ich habe es geändert, weil ich nicht rausgefunden habe, wie ich quasi checken kann, ob ein Audioclip beendet ist. Naja, jedenfalls funktioniert es nun.
Ich schaue mir SwingWorker trotzdem mal an, man liest ja ständig davon.

lg Toto
 
Ich denke mal, Dein Problem ist inzwischen gelöst aber für alle, die das Problem sonst noch haben Ihr könnt auch eine einfachere Lösung wählen, die ist zwar ein wenig "brutal" aber gut ...

Threads werden in der Regel über Thread.start() gestartet aber der ruft (im Prinzip) nur Thread.run() an.

Wenn Du also Thread.run() anstelle von Thread.start() anrufst wird die Methode run() angerufen und während diese ausgeführt wird ist dein Button "beschäftigt".
 

Neue Themen


Zurück
Oben