jogrba Skrevet 14. juli 2006 Del Skrevet 14. juli 2006 Hei, Jeg et program hvor ett av panelene i GUI-vinduet hele tiden lytter til endringer i en database og viser dem hvis de oppstår. Dette har jeg gjort vha en uendelig løkke, som med jevne mellomrom sjekker etter endringer: while(true) { sjekker igjen... venter 10 sekunder... } mer kode... Men her stopper jo også programmet mitt, siden denne løkken fortsetter i det uendelige. Derfor lurer jeg på: Hvordan kan jeg fortsette å kjøre resten av programmet, mens denne while-løkken står og kjører? Er løsningen å bruke Threads, eller finnes det en annen elegant måte? Lenke til kommentar
Frank2004 Skrevet 14. juli 2006 Del Skrevet 14. juli 2006 Hei, Jeg et program hvor ett av panelene i GUI-vinduet hele tiden lytter til endringer i en database og viser dem hvis de oppstår. Dette har jeg gjort vha en uendelig løkke, som med jevne mellomrom sjekker etter endringer: while(true) { sjekker igjen... venter 10 sekunder... } mer kode... Men her stopper jo også programmet mitt, siden denne løkken fortsetter i det uendelige. Derfor lurer jeg på: Hvordan kan jeg fortsette å kjøre resten av programmet, mens denne while-løkken står og kjører? Er løsningen å bruke Threads, eller finnes det en annen elegant måte? 6492352[/snapback] Må starte en ny tråd som poller db og oppdaterer modellen ved evt. endringer, ja. Du kan bruke Thread direkte (i.e. lage en ny klasse som implementerer Runnable og har en tråd som instansvariabel) eller evt. bruke Timer + TimerTask klassene. Husk å trigge en XXXDataChanged -event når du er ferdig med modellen, slik at gui'et kan tegne seg opp på nytt. Bør nok tenke på synkronisering og, i tilfelle brukeren gjør endringer samtidig med at db-innholdet endres. Lenke til kommentar
Drømmemannen Skrevet 14. juli 2006 Del Skrevet 14. juli 2006 Hvis du har et persistens-API kunne du lagt inn en interceptor mellom APIet og implementasjonen som fyrer av DataChanged-eventet etter at en eventuell create/update/delete-metode er kalt. Da slipper du å ha en egen tråd med en evig løkke. Lenke til kommentar
Frank2004 Skrevet 16. juli 2006 Del Skrevet 16. juli 2006 Hvis du har et persistens-API kunne du lagt inn en interceptor mellom APIet og implementasjonen som fyrer av DataChanged-eventet etter at en eventuell create/update/delete-metode er kalt. Da slipper du å ha en egen tråd med en evig løkke. 6493399[/snapback] Er vel endringer utenfra OP er interessert i..? Og selvsagt ingen grunn til å lage en evig løkke, må jo kunne stoppe tråden òg. Eks. (ikke testet..): class MyWorker implements Runnable { private volatile Thread tr = null; public void start() { tr = new Thread(this); tr.start(); } public void stop() { Thread t = tr; tr = null; t.interrupt(); } public void run() { while (tr == Thread.currentThread()) { if (timeToDoStuff()) { doStuff(); } try { sleep(2000); } catch (Exception e) { e.printStackTrace(); } } } } Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå