30. april 2002 - 15:34Der er
8 kommentarer og 1 løsning
timer i java 1.2
Hejsa
Jeg har brug for en timer, der hvert sekund skal kalde en metode. Har fundet en masse forslag på netet, men de er alle meget komplekse. Derfor ønskes en timer, der er så simpel som muligt. Det eneste, der skal kunne indstilles er tiden, der er mellem kaldene. (Den skal egentligt køre i uendelighed. Exit metoden ligger andetsteds). BEMÆRK AT DET ER TIL JAVA 1.2!!!
/* * Timer.java * * Created on 30. april 2002, 15:37 */
import java.util.*;
/** * * @author Reinke * @version */ public class Task extends TimerTask {
/** Creates new Timer */ public Task() { }
public void run() { //Lav noget her }
}
I dens run() metode laver du det du ønsker udført periodisk.
Så laver du: Timer timer=new Timer(); Task task=new Task(); timer.scheduleAtFixedRate(task,0,1000); //udfør 'task.run()' hvert 1000 millisekund startende NU
som starter en timer, der kører 1000 millisekunder og udfører derefter den ovenstående run() metode.
Denne her starter en tråd, der udskriver noget med 2 sekunders mellemrum
p.s. Programmet kører i en uendelig løkke. Forbedret udgave kommer omlidt:
/* * TimerTest.java * * Created on 30. april 2002, 15:36 */
import java.util.*;
/** * * @author Reinke * @version */ public class TimerTest implements Runnable { Thread thread;
/** Creates new TimerTest */ public TimerTest() { thread=new Thread(this); thread.start(); }
/** * @param args the command line arguments */ public static void main(String args[]) { new TimerTest(); }
public void run() { while(true) { try { thread.sleep(2000); System.out.println("Nu er der gået 2 sekunder siden jeg skrev noget sidst"); } catch(InterruptedException e) {
Her er den forbedrede udgave, som tager hensyn til udførsels tiden af det som er i run() metoden, den har ligeledes indbygget en stop tråd metoden, som dog ikke bliver kaldt i mit eksempel.
Hvis du har spørgsmål tager det lige 1.5 timer inden jeg er på igen.
/* * TimerTest.java * * Created on 30. april 2002, 15:36 */
import java.util.*;
/** * * @author Reinke * @version */ public class TimerTest implements Runnable { Thread thread; long delay=2000;
/** Creates new TimerTest */ public TimerTest() { thread=new Thread(this); thread.start(); }
/** * @param args the command line arguments */ public static void main(String args[]) { new TimerTest(); }
public void run() { long startTime = System.currentTimeMillis(); Thread currentThread = Thread.currentThread();
while (currentThread == thread) { try { startTime += delay; Thread.sleep(Math.max(0,startTime-System.currentTimeMillis())); System.out.println("Nu er der gået 2 sekunder siden sidst"); } catch (InterruptedException e) { } } }
public void stop() { //Stop the animating thread. thread = null; } }
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.