28. marts 2002 - 13:19Der er
5 kommentarer og 1 løsning
Styring af tråde
Nogen der ved hvordan man styrer tråde i almindelighed. Jeg har dog et konkret problem her:
På en JList kan man vælge ét element. Når man har valgt et element starter en tråd, som bare kører i al evighed. Hvis man vælger et andet element stopper denne tråd og en anden går i gang; det kan jeg finde ud af. Men hvis man kommer til at vælge det samme element to gange i træk, har jeg lige pludselig to tråde til at køre. Det kan nemlig lade sig gøre bestemte steder at genvælge et element på JList.
Hvordan sørger jeg så for, at der kun kører én tråd hele tiden og hvordan holder jeg generelt styr på mine tråde?? Hvordan kan jeg henvise til dem?
public void getInfo(Server s) { if (s != null) { ControlInfo controlInfo = new ControlInfo(this, s); Thread t1 = new Thread(controlInfo); t1.start(); } }
public class ControlInfo implements Runnable { Mainframe f; Server s; ...(konstruktør)
public void run() { while (s == f.selectedServer) { try { Thread serverInfo = new Thread (new Info(f, s)); serverInfo.start(); serverInfo.sleep(1000); } catch (InterruptedException iexc) { } } } }
while-sætningen gør, at hvis der i Mainframe f vælges en anden server end den, der arbejdes på i denne tråd, stoppes den.
public class Info implements Runnable { Mainframe f; Server s; ... public void run() { //Nogle informationer hentes fra en server //og nogle labels på f sættes til disse informationer. } }
controlInfo-tråden dræber kun sig selv, hvis en anden server (selectedServer) vælges i Mainframe f - fint nok. Men hvis man kommer til på en eller anden vis at vælge samme server igen, startes der endnu en controlInfo-tråd og det er ikke meningen - jeg vil kun have én kørende hele tiden.
Hvis ikke jeg har controlInfo-tråden til at køre, kan jeg ikke få info-tråden til at gentage sig.
I stedet for at starte en ny tråd op, hver gang du skifter server, så lav din ControlInfo til en Singleton og lav en set metode til s, i stedet for at angive den i constructoren.
LOLDA, Dette spørgsmål har jeg da glemt alt om, også om dit svar hjalp noget :D
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.