zamkniecie okna po uplywie czasu

0

moj problem jest nastepujacy:
Mam jframe na ktorym jest jlabel w ktorym powinien byc pokazywany czas. Z tym ze w momencie otwarcia okna w labelu pojawia sie 00-00-00.. nastepnie 00-00-01 itd.. okno powinno zostać zamkniete po uplywie okreslonego czasu..

Wiem ze nalezy utworzyc osobny watek, prowdopodobnie czytajacy czas z zegara systemowego.. dodac do niego okreslony czas i po jego uplywie zamknac okno. na razie mam utworzony watek pobierajacy aktualna godzine, ale i tak nie dziala tak jak powinien gdyz wywolujac metode getTime nic sie nie pokazuje.

import java.text.SimpleDateFormat;
import java.util.Date;

public class Czas implements Runnable{

Thread 			thread = null;
boolean 		stopFlag;
public String	string;

Date dateTemp;
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
String strData; 

public void start(){
	if (thread == null) {
         thread = new Thread(this);
         stopFlag = false;
         thread.start();
      }  
}

public void stop() {
      stopFlag = true;
      thread = null;
   }

public void run() {
	while (thread != null) {
        if ( stopFlag ) break;
       
       dateTemp = new Date();
       strData = formatter.format(dateTemp);
       
        try {
          Thread.sleep(1000);
        } catch (InterruptedException e){}
      }

}

public String getTime(){
	return strData;
}

}

w klasie na ktorej znajduje sie jlabel mam nastepujace wywolanie

Czas czas = Czas();
czas.start();
l_czas.setText(czas.getTime);

potrafi mnie ktos dalej pokierowac?

0

metoda 1:
licz obroty w pętli while (thread != null) {} i jak minie odpowiednia ilość sekund to po prostu zamykaj okno.
metoda 2:
odejmuj datę obecną od daty w której ma być zamknięte jak różnica będzie 0 to zamykasz okno i po problemie...

0

Koziołek wiesz moze dlaczego metoda getTime pokazuje mi aktualny czas ale tylko w momencie otworzenia okna? Pozniej jej wartosc jest ciagle stała, mimo ze przeciez wartosc czasu ulegla zmianie.

0

bo w momencie

Czas czas = Czas();

w zmiennej czas robisz "stopklatkę" dla czasu :)

0

czyli jak rozwiazac ten problem? :)

0

Implementacja metody nr1:

public class Czas implements Runnable{
   long numberOfSteps = 10000; //10tyś milisekund
// dużo kodu... 
  public void run() {
                long steps = 0;  // czas ktory upłyną
                while (thread != null) {
                if ( stopFlag ) break;
                if(steps >=numberOfSteps ) break;
               dateTemp = new Date();
               strData = formatter.format(dateTemp);
               
                try {
                  Thread.sleep(1000);
                  steps+=1000; //dodajemy 1000ms
                } catch (InterruptedException e){}
              }

        }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1