[ Mladen Mitrovic @ 08.01.2005. 23:20 ] @
Ovo je cisto vezano za moje bavljenje javom, a program nema nikakvu svrhu osim UCENJA..

Treba da koriscenjem Timer i TimerTask klasa napravim da se na svakih 2sekunde pojavljuje poruka, 5 puta na primer, s tim(e sad dolazi problem) sto posle svake 2sec treba da ispisuje, prvo 1, pa 2, pa 3,4 i 5...

Evo sta sam ja napraviio. On prikaze posle 2. sek sve odjednom iako mi nije jasno gde gresim:

Code:
 
import java.util.*;

public class PetPoruka {
    int pon=1;
    static Timer vreme;

    public PetPoruka(){
            do{
                vreme=new Timer();
                Poruka p=new Poruka(pon);
                vreme.schedule(p, 2000);
                pon++;
            } while (pon<6);
            vreme.cancel();


    }

    public class Poruka extends TimerTask{
            int i=0;
            public Poruka(int x){
                this.i=x;
            }

           public void run(){
               System.out.println(" Javljam se "+i+" put");


           }
    }

    public static void main(String[] args){

            new PetPoruka();

    }
}
 



Pokusavao sam na razne nacine, ali se uvek zavrsi! Ako mozete da mi skrenete paznju gde gresim...
[ mucky @ 09.01.2005. 00:13 ] @
Problem je u sledecem:

Ti imas petlju
Code:

do{
    vreme=new Timer();
    Poruka p=new Poruka(pon);

    vreme.schedule(p, 2000);
    pon++;

} while (pon<6);


koja za vrlo kratko vreme napravi 4 nova objekta tipa Poruka, i za
svakog od njih
odredi da se startuju posle 2000 milisekundi. Posto je vremenska razlika izmedju
pravljenja ta 4 objekta veoma mala, kada prodje 2000 milisekundi izgleda kao
da su se sva 4 ispisala odjedanput.

Znaci, ovako se ne moze uraditi to sto ti zelis :)

Sa najmanje izmena u kodu mogao bi da u svakom krugu petlje dodajes po 2000
na delay, nesto ovako:

Code:

long delay = 2000;
do{
    vreme=new Timer();
    Poruka p=new Poruka(pon);

    vreme.schedule(p, delay);
    pon++;
    delay += 2000;

} while (pon<6);


Tako ce izgledati kao da se pojavljuju nakon 2 sekunde, mada mislim da je
ovakvo resenje malo skrnavo.

E da, taj kod ne bi trebao da stavljas u konstruktor klase PetPoruka nego da
napravis posebnu metodu koju ces kasnije pozvati.
--
"Life is a tragedy for those who feel, and a comedy for those who
think." -La Bruyere
[ mucky @ 09.01.2005. 00:25 ] @
Da budem jasniji:

Petlja ne ceka 2000 milisekundi nakon naredbe
Code:

vreme.schedule(p, 2000);

nego odmah nastavlja i zato ispada da se sve ispise u isto vreme.