|
| applet og tråde Fra : weaxler |
Dato : 11-12-01 09:23 |
|
Jeg har lavet en applet, som kører i den sædvenlige hovedtråd, men der er
også andre tråds som
laver noget animation o.s.v mit problem er, at jeg gerne vil have disse
tråde til at stoppe når fokuset ikke er på appletten, og starte forfra når
fokus er tilbage igen, hvordan gøres dette.
Skal klasserne som implementer runnable indeholde nogel specielt for at
dette kan lade sig gøre?
m.v.h
Applet Jack
| |
Brian Matzon (11-12-2001)
| Kommentar Fra : Brian Matzon |
Dato : 11-12-01 12:37 |
|
"weaxler" <weaxler@mail1.stofanet.dk> wrote in message news:3c15c321$0$326$ba624c82@nntp02.dk.telia.net...
> Jeg har lavet en applet, som kører i den sædvenlige hovedtråd, men der er
> også andre tråds som
> laver noget animation o.s.v mit problem er, at jeg gerne vil have disse
> tråde til at stoppe når fokuset ikke er på appletten, og starte forfra når
> fokus er tilbage igen, hvordan gøres dette.
> Skal klasserne som implementer runnable indeholde nogel specielt for at
> dette kan lade sig gøre?
Ja en sleep mekanisme når applet mister fokus.
lad din applet være en FocusListener, når den så mister fokus, sætter
du et flag (som skal være volatile) - dette flag checker trådene så
på... eks: (utestet kode - virker måske ;))
....
protected volatile boolean sleeping;
....
while(running) {
while(!sleeping) {
doStuff();
}
synchronized(LOCK) {
while(sleeping) {
LOCK.wait();
}
}
}
....
i din focuslistener:
focusGained(FocusEvent e) {
sleeping = false;
synchronized(LOCK) {
LOCK.notifyAll();
}
}
Grunden til at et sådan flag skal være volatile, er fordi at VM specs'ne
tillader at en tråd holder en cachet værdi af de variabler den tilgår.
/Brian Matzon
| |
|
|