Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem 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.

Předmět Autor Datum
public void actionPerformed(ActionEvent e) a proč to cpeš sem, to musí být nový thread, to že napíš…
AZOR 01.05.2013 14:19
AZOR
Pomocí čeho tedy můžu program na chvilku pozastavit?
JanH 01.05.2013 14:21
JanH
zkoušel jsem: long t0, t1; t0 = System.currentTimeMillis(); do { t1 = System.currentTimeMillis(); }… nový
JanH 01.05.2013 14:22
JanH
je to velice VELICE velice (až na to, že je to změna obrázku ne posun obrázku) tomu co jsme tu řešil… nový
AZOR 01.05.2013 14:38
AZOR
A jaká je tedy podmínka, že to musí běžet v novém vlákně? Vždyť pokud chce pozastavit aktuální činno… nový
freez2 01.05.2013 15:34
freez2
Pokud zastaví jediné vlákno programu, tak zastaví i mj. překreslování jeho obrazovky a reakce na uži… nový
Wikan 01.05.2013 15:36
Wikan
Tak o to jde ne? Aby to na chvíli pozastavil a pak se vlákno opět spustilo... Nebo nerozumím dotazu. nový
freez2 01.05.2013 15:42
freez2
On chce, aby se změnil obrázek, aplikace jela dál a za chvíli se ten obrázek změnil znovu. nový
Wikan 01.05.2013 15:46
Wikan
Tak to chápu dobře, ale pořád nerozumím proč tam dávat druhé vlákno, když stačí jednoduše pozastavit… nový
freez2 01.05.2013 15:51
freez2
Díky, funguje. poslední
JanH 01.05.2013 16:13
JanH
public void actionPerformed(ActionEvent e)

a proč to cpeš sem, to musí být nový thread, to že napíšeš Thread.sleep ještě neznamená že trhreaduješ.

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.

Zpět do poradny Odpovědět na původní otázku Nahoru