Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 22. 02. 2013 21:26 — Editoval milwoukee (22. 02. 2013 22:41)

milwoukee
Příspěvky: 158
Reputace:   
 

Opakovani metody v casovem intervalu

Ahoj, neviete mi poradit ako dosiahnem opakovanie metody v casovom intervale?

Mam metodu repeat() a metodu check() v tej istej triede a potrebujem, aby sa v metode repeat() opakovane spustala metoda check() v casovom intervale 60000ms. Nasiel som niekolko materialov ale nepodarilo sa mi to dosiahnut. Viete mi poradit najjednoduchsie riesenie? ( moze to byt aj vo swingu ) dakujem


prave som skusal  toto ale nefunguje to , ako keby vobec nespravi prikaz check();

public void repeat(){

  ActionListener task = new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        check();
      }
  };
  new Timer(60000, task).start();

}

Offline

 

#2 22. 02. 2013 23:24

Kondr
Veterán
Místo: Linz, Österreich
Příspěvky: 4246
Škola: FI MU 2013
Pozice: Vývojář, JKU
Reputace:   38 
 

Re: Opakovani metody v casovem intervalu

Ahoj, možná by stálo za to napsat, že máš na mysli Javu ;) Problém je nejspíš s vlákny -- timer běží v jiném vlákně než aplikace a tudíž aplikace skončí, aniž by čekala na timer. Pokud za new Timer() přidáš čekání

Code:

while(true);

tak to poběží. Hezčí mi ale přijde

Code:

public class Matweb {

    public void repeat() {

        while (true) {
            check();
            try {
                Thread.sleep(600);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public void check() {
        System.out.print("*");
    }

    public static void main(String[] args) {
        new Matweb().repeat();
    }
}

BRKOS - matematický korespondenční seminář pro střední školy

Offline

 

#3 23. 02. 2013 10:29 — Editoval milwoukee (23. 02. 2013 13:19)

milwoukee
Příspěvky: 158
Reputace:   
 

Re: Opakovani metody v casovem intervalu

↑ Kondr:

Ahoj dakujem za tvoju odpovedl, naviedla ma na dobru cestu ale nejako sa mi to nepodarilo rozbehat , ale nakoniec som nasiel alternativu pomocou vytvorenia vlastnej metody

public static void wait (int n){
        long t0,t1;
         t0=System.currentTimeMillis();
         do{
             t1=System.currentTimeMillis();
         }
         while (t1-t0<n*1000);
}

No a vzisiel z toho dalsi problem :) (riesenie bude zrejme pustit dve vlakna ale z toho som lama)

(repeatom myslim while)
Program funguje takto: nacitam load() metodou text zo suboru do atributu, a potom spustim check() v repeate aj z waitom co sposobi ze aktualny text v subore sa kazdych x sekund porovnava z textom v atribute.
Ono to funguje, ten program caka kym nezmenim ten textovy subor a vtedy repeat skonci a vyhodi oznamenie.
Problem je v tom, ze pocas toho cyklu repeat, mi nedovoli  urobit ziadnu akciu. Chcel som jednoducho porovnavat premennu v repeate, ktora ked sa zmeni tak sa cyklus ukonci. Tu premennu menim kliknutim na button. Lenze to nieje mozne. Tak isto som skusal dat vypisovat po kazdej iteracii znak v Layeri a tiez to nejde, vypise ich naraz az na konci aj ked logicky v kode su zapisane tak, aby sa vypisovali pocas repeatu. Ma tento problem nieco s vlaknami?

Vdaka za odpoved

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson