časová prodleva během běhu programu – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

časová prodleva během běhu programu – Java – Fórum – Programujte.comčasová prodleva během běhu programu – Java – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
Noneus0
Návštěvník
7. 2. 2014   #1
-
0
-

Opět ahoj,

rád bych docílil toho, že se u výpočtu příkladu (např. jednoduché sčítání) výsledek objeví až za několik sekund. Nechci používat sleep, protože během čekání chci, aby program běžel dál. (např. v GUI aby se hýbal gif apod.)

vyhrabal jsem někde tady tohle:


final Timer timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask() { int i = 10; public void run() { System.out.println(i--); if (i < 0) timer.cancel(); } }, 0, 1000);
ale to nefunguje

Nahlásit jako SPAM
IP: 217.195.173.–
fatalwir0
Newbie
7. 2. 2014   #2
-
0
-

Je potřeba udělat to ve více vláknech (thread), ale nevím jak. Momentálně s tím také bojuji.

Nahlásit jako SPAM
IP: 77.78.89.–
petr1430
Newbie
7. 2. 2014   #3
-
0
-

Čau 

Zkus tohle je to taky "timer" ale trochu jinak napsanej mělo by to fungovat.

http://www.javaprogrammingforums.com/java-se-api-tutorials/883-how-use-timer-java.html

Nahlásit jako SPAM
IP: 109.235.2.–
z
~ Anonymní uživatel
268 příspěvků
7. 2. 2014   #4
-
0
-

Na GUI se hodí javax.swing.Timer (v Javě je několik timerů, správně napiš import, nebo napiš název třídy celý)

ActionListener al = new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        // neco
    }
};
Timer t = new Timer(1000/*milisekundy*/, taskPerformer);
t.setRepeats(false); // jen jednou
t.start();
Nahlásit jako SPAM
IP: 88.101.8.–
z
~ Anonymní uživatel
268 příspěvků
7. 2. 2014   #5
-
0
-

Místo taskPerformer má být v tom příkladu samozřejmě al.

Nahlásit jako SPAM
IP: 88.101.8.–
Noneus0
Návštěvník
8. 2. 2014   #6
-
0
-

#3 petr143
funguje, ale nějakou záhadou mi nejde z run návratová hodnota....

Nahlásit jako SPAM
IP: 217.195.173.–
Řešení
sleepy
~ Anonymní uživatel
422 příspěvků
8. 2. 2014   #7
-
0
-
Vyřešeno Nejlepší odpověď

Z toho navratova hodnota ani nepojde. Je to totiz void. Ani to nema zmysel. Zober si tvoja aplikacia bezi, vygeneruje vlakno v ktorom bezi vypocet a pocas toho aj tvoja aplikacia. Na to aby si vedel zasa ziskat navratovu hodnotu. Tak sa vlakna musi pockat. Cize jedno z nich musis pozastavit. Na taketo veci sluzi interface Callable<T> . Kotry ti ako navratovu hodnotu poskytne Future<T>. Z ktoreho ziskas hodnotu metodou get(). Ta magicka metoda ti pozastavy vlakno do vtedy pokial nebude mat druhe vlakno vysledok, alebo nebude interuptnute. Ale neviem ci sa to da pouzit v Timery. Takze nie je. Ale da sa to urobit nejako takto:

SheduledExecutorService timer = Executors.newSingleThreadScheduledExecutor();
SheduledFuture<T> future = timer.<T> shedule(new Callable<T>(){
	public T call(){
		return // nieco v T;
	}
}, 10L, TimeUnit.SECONDS);

// Dalsi kod

// A tu si pockas na vysledok future
T vysledok = future.get();


Na tvojom mieste by som volil, aby animacia bezala v inom threade a pocitalo sa v maine. Tak sa dokazes vyhnut nepriemnostiam.

Nahlásit jako SPAM
IP: 147.175.177.–
sleepy
~ Anonymní uživatel
422 příspěvků
8. 2. 2014   #8
-
0
-

#7 sleepy
Zle som sa vyjadril, ale po precitani kodu si to vsimnes.

Nahlásit jako SPAM
IP: 147.175.177.–
Noneus0
Návštěvník
8. 2. 2014   #9
-
0
-

#7 sleepy
díky moc.

Nahlásit jako SPAM
IP: 217.195.173.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 40 hostů

Podobná vlákna

Zastaveni behu programu — založil Tom@sQo

Zrychleni behu programu — založil VeverkaVeveri

Konec běhu programu — založil Polarski

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý