[java] timertje bouwen

Pagina: 1
Acties:

  • Zynth
  • Registratie: September 2001
  • Laatst online: 29-07 15:30
Ik moet voor een stuk programma een timer bouwen.
Hiervoor gebruik ik de klasse Calendar, omdat dit de nieuwe vervanging is van Date.

Ik heb een vector met daarin een aantal Calendars (alle tijden van de timer).
Deze heb ik met de methode "set" van "Calendar" gemaakt.

Maar nu wil ik dus om de 5 seconden een stukje code laten controleren of 1 van de Calendars ouder is dan de huidige Calendar.
Maar mijn vraag is; hoe krijg ik de huidige systeemtijd in een calendar?

thnx!

  • Orphix
  • Registratie: Februari 2000
  • Niet online
http://java.sun.com/j2se/1.4/docs/api/index.html
Like other locale-sensitive classes, Calendar provides a class method, getInstance, for getting a generally useful object of this type. Calendar's getInstance method returns a Calendar object whose time fields have been initialized with the current date and time:
code:
1
 Calendar rightNow = Calendar.getInstance();
Dit is denk ik wat je zoekt. Maar je topic is wel een beetje misleidend, want je vraagt niks over de timer :?

  • Zynth
  • Registratie: September 2001
  • Laatst online: 29-07 15:30
nou, eigenlijk wel een beetje verborgen :)
ik hoopte dat ik commentaar zou krijgen als het aanmaken
van een calendar met "set" niet zou gaan lukken.
Maar ik denk inderdaad dat dat prima gaat (in ieder geval volgens mijn bedoeling.)

Is er trouwens geen betere, minder resource-intensieve manier om een timer te bouwen?
dan om de 5 seconden een heel nieuw calendar object aan te maken etc... ?

  • Zynth
  • Registratie: September 2001
  • Laatst online: 29-07 15:30
trouwens:

uit de javadoc:
code:
1
Gets a calendar using the default time zone and locale.

die maakt toch een calendat met je tijdsZONE en niet je huidige tijd??

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Op dinsdag 26 maart 2002 01:50 schreef Zynth het volgende:
trouwens:

uit de javadoc:
code:
1
Gets a calendar using the default time zone and locale.

die maakt toch een calendat met je tijdsZONE en niet je huidige tijd??
Achter dat zinnetje staat nog dit:
The Calendar returned is based on the current time in the default time zone with the default locale.
Oftewel je kan dus specifiek nog een time-zone en locale aangeven (dit is vooral van belang met het opmaken van de datum bij het weergeven), maar gebruikt wel de huidige tijd.

Neem ik aan dan.. :)

  • Zynth
  • Registratie: September 2001
  • Laatst online: 29-07 15:30
haha...
in javadoc 1.3.1 staat dat ene stukje over dat hij de HUIDIGE tijd aanneemt, er niet bij :P

  • Zynth
  • Registratie: September 2001
  • Laatst online: 29-07 15:30
hmz...

dit mag niet, want Calendar is abstract:
code:
1
 Calendar newCalendar = new Calendar();

nouw stukkie werkt dus ook niet.

enig idee over hoe ik dan een calendar aanmaak?

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Op dinsdag 26 maart 2002 02:12 schreef Zynth het volgende:
enig idee over hoe ik dan een calendar aanmaak?
ja update naar 1.4 en gebruik die code zoals ik het hierboven vermelde :)

Maar zijn er serieus redenen waarom je bij 1.3 moet blijven? Zoja, dan wil ik wel ff kijken hoe het anders zou moeten dan.

  • Zynth
  • Registratie: September 2001
  • Laatst online: 29-07 15:30
nee, ik hoef niet bij 1.3 te blijven hoor.
als jbuilder maar andere versies vreet...

dit is trouwens de klasse die ik voor mijn timer gebruik:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import java.util.*;

public class Timer extends Thread{

private PowerServer powerserver;
private Vector timers;
private Calendar calendar;

  public Timer(PowerServer powerserver){
     this.powerserver = powerserver;
  }


  public void run(){
  }


  public void setTimer(int year, int month, int day, int hour, int minute, int second){
     //Create corresponding calendar
     Calendar newCalendar = Calendar.getInstance();
     newCalendar.set(year,month,day,hour,minute,second);

    boolean added = false;
    for(int i=0;i<timers.size();i++){
      if(newCalendar.equals(timers.elementAt(i)){
        timers.set(i,newCalendar);
        added = true;
        break;
      }
      if(newCalendar.after(timers.elementAt(i)){
        timers.insertElementAt(newCalendar,i-1);
        added = true;
        break;
      }
    }
    if(!added){
    timers.addElement(newCalendar);
    }
  }


  public String getTimers(){
    return timers.toString();
  }


  public void delTimer(int year, int month, int day, int hour, int minute, int second){
     //Create corresponding calendar
     Calendar delCalendar = Calendar.getInstance();
     delCalendar.set(year,month,day,hour,minute,second);

    for(int i=0;i<timers.size();i++){
      if(delCalendar.equals(timers.elementAt(i)){
         timers.removeElementAt(i);
      }
    }
  }


}

lijkt dat een beetje op timer-functionaliteit? :P

Het uitlezen van de timer, en iets doen als hettijd is, is nog niet geïmplementeerd...

De Calendars gooi ik in een vector, op volgorde, zodat straks het checken of een timer verstreken is, lekker makkelijk gaat (wegens gesorteerdheid)

  • Zynth
  • Registratie: September 2001
  • Laatst online: 29-07 15:30
de echte timer is af:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
  public void run(){
    while(true){
    Calendar presentCalendar = Calendar.getInstance();
    if(presentCalendar.after(timers.elementAt(0)){
      //doe iets
      timers.removeElementAt(0);
    }
    try{
      Thread.sleep(5000);
      }
      catch(Exception o){}
    }
  }

denk je dat dit geheel gaat werken?

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Voordat ik er verder naar kijk (ik heb niet zoveel Java ervaring), is dit een opdracht oid? Standaard heeft Java namelijk ook Timers waar je gebruik van kan maken.

zie ook
http://java.sun.com/j2se/1.4/docs/api/java/util/Timer.html

  • Bobco
  • Registratie: Januari 2001
  • Laatst online: 30-10-2023

Bobco

I used to dream about Verona.

Op dinsdag 26 maart 2002 02:36 schreef Orphix het volgende:
Voordat ik er verder naar kijk (ik heb niet zoveel Java ervaring), is dit een opdracht oid? Standaard heeft Java namelijk ook Timers waar je gebruik van kan maken.
Dit lijkt me inderdaad zinniger. Die Calendars zijn volgens mij meer bedoeld om dingen met datums dan met tijd te doen. Als je kijkt naar de hoeveelheid methods dan lijken ze me ook nogal 'zwaar'.

With the light in our eyes, it's hard to see.


  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 03-09 16:40
In versie 1.3.1 zijn die timers nog software matig (hoor ik net). Sinds 1.4 zijn ze met hardware timers.

Voor SDK 1.4 zijn die Timer objecten dus nogal CPU intensief.

  • Zynth
  • Registratie: September 2001
  • Laatst online: 29-07 15:30
hmz...
ik denk dat die timer-functie iets te weinig functionaliteit bied voor mij.
Ik wil namelijk timers kunnen zetten, verwijderen, en uitlezen, en makkelijk dingen doen op het moment dat de timer verstrijkt.

Moet ik dan zoals dit Calendar gebruiken?
vroeger zou ik het gedaan hebben met Date, maar omdat dat al bijna helemaa; 'deprecated' is, kon ik dacht ik beter overstappen naar de vervanger; calendar.

maarehm; gaat dit stuk code werken? (onder 1.3.1)
Pagina: 1