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
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
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í
while(true);
tak to poběží. Hezčí mi ale přijde
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(); } }
Offline
↑ 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