sleep i Java

Tråden skapades och har fått 3 svar. Det senaste inlägget skrevs .
1

Hej! Jag skriver ett javaprogram där allt helt enkelt skall stå stilla i någon sekund.

Hur gör man det så enkelt som möjligt?

  • Medlem
  • 2004-11-21 12:28

Du kan använda dig utav Thread.sleep()

Se följande testat under JSDK 1.4.2

class HelloMac
{
  public static void main (String args[])
        throws Exception
  {
   try {
        System.out.println("Hello Mac!");
        // Sleep for 5 seconds
        // Thread.sleep() must be within a try - catch block
        Thread.sleep(5000);
       }
   catch (Exception e)
   {   
        System.out.println(e.getMessage());
   }
  }
}

Mvh
/Ulf

Perfekt! Nu återstår bara ett litet problem...

Jag vill att tråden skall sova tills jag trycker på en knapp i en annan class. Om jag låter tråden sova, kan jag använda interrupt() för att avbryta den?

Hur skall jag skriva för att använda interrupt() ifrån en annan klass?

Själva sleep-grejen ligger i main

  • Medlem
  • International user
  • 2004-11-22 16:11
Ursprungligen av Gustaf Haag:

Perfekt! Nu återstår bara ett litet problem...

Jag vill att tråden skall sova tills jag trycker på en knapp i en annan class. Om jag låter tråden sova, kan jag använda interrupt() för att avbryta den?

Hur skall jag skriva för att använda interrupt() ifrån en annan klass?

Själva sleep-grejen ligger i main

Här har du lite exempel-kod, tagen ur java 1.4.2 API DOC:

public void run() {
        Thread thisThread = Thread.currentThread();
        while (blinker == thisThread) {
            try {
                thisThread.sleep(interval);

                synchronized(this) {
                    while (threadSuspended && blinker==thisThread)
                        wait();
                }
            } catch (InterruptedException e){
            }
            repaint();
        }
    }

    public synchronized void stop() {
        blinker = null;
        notify();
    }

När användaren trycker på knappen så sätts threadSuspende till TRUE, och programmet väntar, tills threadSuspended blir FALSE igen. Detta får du göra nånstans i koden.

Har du koden i main-metoden så kan det bli lite problematiskt att anropa den från andra klasser.

Du bör nog skapa en klass, som antingen ärver från klassen Thread, eller implementerar gränssnittet Runnable. Implementera ovanstående metoder i denna klass. Läs mer om hur Sun tycker att Javas Threads ska användas: http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Thread.html

Där kan du läsa mycket matnyttigt om varför t ex metoderna Thread.suspend(), Thread.stop(), Thread.resume() är depricated, dvs metoder som inte bör användas och kan komma att tas bort i nyare versioner av Java (vet dock inte om de är borttagna ur 1.5).

1
Bevaka tråden