Avatar billede sibor Nybegynder
30. april 2002 - 15:34 Der 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!!!

På forhånd tak
Sibor
Avatar billede disky Nybegynder
30. april 2002 - 15:43 #1
du skal lave en klasse der extender TimerTask

f.eks:

/*
* 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.
Avatar billede disky Nybegynder
30. april 2002 - 15:44 #2
og det kræver altså JDK 1.3

Hvis du vil lave det før jdk1.3 er det besværligt.

Men du kan selvfølgelig kigge i sourcekoden til JDK1.3's metoder der er anvendt og se hvordan det er gjort.

F.eks. kopiere hele bunken over i dit projekt, så virker det også.
Avatar billede disky Nybegynder
30. april 2002 - 15:45 #3
Det du ellers kan gøre er at lave en tråd, hvor i du i dens run() metode har en sleep() som sover i 1 sekund.
Avatar billede sibor Nybegynder
30. april 2002 - 15:46 #4
Takker, men timerTask og Timer er ikke med i java.util.* i java 1.2
Avatar billede sibor Nybegynder
30. april 2002 - 15:47 #5
Hvordan gøres det med tråden?
Et simpelt eksempel, der virker og pointene er dine!
Avatar billede disky Nybegynder
30. april 2002 - 15:57 #6
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)
            {
               
            }
        }
    }
   
}
Avatar billede sibor Nybegynder
30. april 2002 - 16:03 #7
SUPER!!!

;-)
Avatar billede disky Nybegynder
30. april 2002 - 16:03 #8
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;
    }
}
Avatar billede sibor Nybegynder
30. april 2002 - 17:21 #9
Super Takker mange gange
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester