x Sekunden warten

  • Themenstarter Themenstarter Martin
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
M

Martin

Gast
Hallo,

wie kann ich in Java eine gewisse Zeit warten?
Hatte mir eigentlich gedacht das es so geht:
sleep(int msec);
oder wait(int msec);
aber so klappt es leider nicht. Wie geht das richtig?

Schon mal danke für eure Antworten.
 
Thread.sleep( ... )

Braucht noch ein try-catch-Block.

Und wenn du was graphisches programmierst: beschäftige dich zuerst mit Multithreading.
 
Es handelt es sich nicht um ein Multithreting Programm. Ich muss doch erst ein Object vom Typ Thread erzeugen. Da ich schon von JFrame erbe, fällt das erben von Thread weg. Kann ich einfach xxx Thread = new Thread(); benutzen und dann xxx.sleep(1000); schreiben?
 
Thread.sleep ist eine statische Methode, die kannst du also aufrufen, ohne ein Thread-Objekt erzeugen zu müssen.

Diese sleep-Methode blockiert dann denjenigen Thread, der die Methode aufgerufen hat.

Guck mal in der FAQ nach. Das ist dort vielleicht ein leicht anderes Problem, aber "sleep" wird eingesetzt um eine Schlaufe "abzubremsen".

Und wenn du einfach so mal "sleep" aufrufst, ohne Multithreading zu betreiben, wird einfach dein ganzes Prog stehen (inkl. der graphischen Oberfläche).
 
Habe jetzt einfach mal an der passenden stelle Thread.sleep(1000); geschrieben. Beim Compilieren kommt folgende Fehlermeldung (benutze NetBeans, aber dass sollte ja egal sein):

init:
deps-jar:
Compiling 1 source file to /home/martin/Timer/build/classes
/home/martin/Timer/src/timer/TimerGUI.java:108: unreported exception java.lang.InterruptedException; must be caught or declared to be thrown
Thread.sleep(1000);
1 error
BUILD FAILED (total time: 0 seconds)
 
Versuch mal das hier:

Code:
try{
     Thread.sleep(1000);
}catch(InterruptedException e){}
 
OK, danke das klappt eigentlich soweit. Aber doch nicht ganz so wie ich es mir vorgestellt habe:
Ich versuche einfach nen Timer zu schreiben der von einer bestimmten Zeit runterzält. Volgenden ansatz habe ich. Das Problem was jetzt auftaucht, ist dass die zwischenschritte nicht angezeigt werden. Das Ende wird richtig angezeigt und die regrusionsschleife verlassen aber eigentlich solle noch die zwischenschritte angezeigt werden, aber befor das geschied greift wahrscheinlich schon die sleep anweisung. Was kann ich da machen (auser multithreading)?

Code:
   private void StartStopBtnActionPerformed(java.awt.event.ActionEvent evt) {
AbgelaufenLab.setText("0");
abgelaufenVar = 0;
RestLab.setText(TimeTxt.getText());
restVar = Integer.parseInt(RestLab.getText());
try{
     Thread.sleep(1000);
}catch(InterruptedException e){} 
Timer();
    }
    
    private int Timer()
    {
        abgelaufenVar++;
        restVar--;
        AbgelaufenLab.setText(""+abgelaufenVar);
        RestLab.setText(""+restVar); 
        if (restVar==0){return 0;}
        
        try{
            Thread.sleep(1000);
        }catch(InterruptedException e){} 
        Timer();
        return 1;
    }
 
Danke, jetzt weiss ich wie es richtig geschrieben wird 🙂 aber das Prog läuft immer noch nicht richtig. Kann mir den keiner nen tipp geben?
 
kann es leider nicht ausprobieren - aber als Tipp würde ich dir die Tiimer Klasse ans Herz legen...

Swing ist nicht Thread-safe - daran könnte es liegen....
 
Danke, wusste gar nicht das es in Java nen Timer gibt. So wollte ich das auch eigentlich machen. Hatte aber nichts passendes gefunden und deswegen das mit dem sleep versucht
 
Martin hat gesagt.:
Danke, wusste gar nicht das es in Java nen Timer gibt. So wollte ich das auch eigentlich machen. Hatte aber nichts passendes gefunden und deswegen das mit dem sleep versucht

Es gibt sogar zwei Timer in Java.

javax.swing.Timer
java.util.Timer

Der javax.swing.Timer ist etwas einfacher zu nutzen, aber auch ungenauer und eher für GUI Sachen zu gebrauchen, oder bei Dingen, wo es nicht auf Millisekunden ankommt. Einfach mal in die API Doku schauen, wie man die nutzt.
 
Danke für den Tip mit dem Timer. Habe mich für den swing Timer entschieden. Bei dem Prog muss es nicht so genau sein. Habe aber jetzt noch ne frage. Der Timer zählt in meinem Prog eine Variable runter. Wenn die bei 0 angekommen ist soll was auf der GUI angezeigt werden. Das war noch kein Problem, habe einfach ein Label genommen was visible gesetzt wird. Aber zusätzlich soll noch ein Ton ausgegeben werden. Entweder über den PC-Speaker nen einfaches beep (aber dazu habe ich leider gar nichts in der Java-doc gefunden) oder eine Datei über die Soundkarte (egal ob MP3 oder wav oder sonst was). Für das zweite habe ich gefunden dass ich da was mit javax.sound.sampled machen muss. Aber das habe ich alles nicht so ganz verstanden. Ausserdem würde mir die variante über den PC-Speaker besser gefallen, da man diesen nicht so einfach aus machen kann. Ist das in Java überhaubt realisierbar und hat jemand nen Tipp wie ich das angehen muss?
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben