Sekundenzähler!

Status
Nicht offen für weitere Antworten.
L

LazyBoy

Gast
Ich will in ein Programm eine kleine Uhr implementieren, die einfach die Sekunden hochzählt.
Dafür braucht man doch eigentlich keine neue Thread Instanz zu erstellen, sondern kann einfach mit der static methode sleep(long millis) den Prozess des hochzählen verzögern oder?!?

Also ich habe folgende kleine methode:
Code:
public void run() {
        runFlag = true;
        while (runFlag) {
            
            makeStep(); //zählt einen hoch
            repaint(); //is ne Unterklasse von Canvas
            try {
                Thread.sleep(1000l);
            }
            catch (InterruptedException e) {}
        }
    }
Aber irgendwie funktioniert das nicht. Wenn die Methode aufgerufen wird, dann hängt sich das ganze Programm auf. Woran könnte das liegen??
 
B

Beni

Gast
Man benötigt einen zusätzlichen Thread.
Ein Thread zeichnet (der AWT-EventDispatcher), einer zählt.
 
L

LazyBoy

Gast
Den AWT-EventDispatcher muss ich aber nicht erstellen, das macht doch die VM oder?
Also nur einen fürs zählen!?
 
L

LazyBoy

Gast
Jo Danke das war ne gute Idee!

Trotzdem würds mich interessieren warum das mit dem Thread vorher nicht geklappt hat.
 

Sky

Top Contributor
Also, ein Timer würde Dir die ganze Arbeit abnehmen Wenn Du's aber mit nem Thread lösen willst, so liest Dich am besten mal in das Thema "Multi-Threading" ein.
Btw: Hier gibt's ein gutes Tutorial im Forum zum Thema!
 

Bert Brenner

Bekanntes Mitglied
Wenn du das Problem mit Thread.sleep lösen würdest, dann müsstest du die Zeit die der jeweilige Rechner braucht um die Befehle zwischen den einzelnen Schlafphasen abziehen.
 

Stefan1200

Top Contributor
Warum speicherst du nicht einfach den Long (System), und zeigst einfach alle 500 ms die Differenz an. Und wenn jemand auf Stopp drückt (z.B. Stoppuhr), dann speicherst du die Differenz und schon hast du den exakten Wert.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben