Java, Thread.sleep()
Dobrý den,
prosím vás, co se zhruba stane když v Jave zavolám Thread.sleep(1000)?
Mám jednoduchý program, který vytvoří okno a v něm jedno tlačítko. Plán byl takový, že při stisknutí tlačítka se změní jeho obrázek, pak se vteřinu počká a opět se změní jeho obrázek.
Ale program se chová se tak, že při stisknutí tlačítka se vteřinu čeká a pak se na tlačíko nastaví až ten druhý obrázek.
public void actionPerformed(ActionEvent e) {
tlacitko.setIcon(img2);
try {
Thread.sleep(1000);
}
catch (Exception ee) {
System.out.format("Vzbudilo nas to brzo%n");
}
tlacitko.setIcon(img1);
}
Jak tedy docílit toho, aby se tlačítko změnilo, pak program počkal a znovu se měnilo. Prostě aby tu změnu postřehlo lidské oko.
Předem díky za pomoc.
a proč to cpeš sem, to musí být nový thread, to že napíšeš Thread.sleep ještě neznamená že trhreaduješ.
Pomocí čeho tedy můžu program na chvilku pozastavit?
zkoušel jsem:
ale vysledek je úplně stejný, jako při použití Thread.sleep();
je to velice VELICE velice (až na to, že je to změna obrázku ne posun obrázku) tomu co jsme tu řešili před pár desitkama minut: http://pc.poradna.net/q/view/1016574-java-proces-b ar-laguje
Thread.sleep ano, ale OPRAVDU v novém threadu ne v události tlačítka. Tam se bude jen startovat thread, který bude vyměňovat obrázky a ve kterém tedy muže být to sleep.
A jaká je tedy podmínka, že to musí běžet v novém vlákně? Vždyť pokud chce pozastavit aktuální činnost obzvlášť v takto jednoduchém prográmku, nehrají vlákna vůbec roli, resp. jestli jim ani uživatel nerozumí.
Pokud zastaví jediné vlákno programu, tak zastaví i mj. překreslování jeho obrazovky a reakce na uživatelské akce.
Tak o to jde ne? Aby to na chvíli pozastavil a pak se vlákno opět spustilo... Nebo nerozumím dotazu.
On chce, aby se změnil obrázek, aplikace jela dál a za chvíli se ten obrázek změnil znovu.
Tak to chápu dobře, ale pořád nerozumím proč tam dávat druhé vlákno, když stačí jednoduše pozastavit to hlavní? Ano, aplikace pak bude CELÁ zamrzlá, ale u vteřiny a u takto jednoduchého prográmku bych to neřešil.
Díky, funguje.