Como contar o tempo?

14 respostas
R

ola amigos, eu preciso fazer com que determinada figura fique na tela por 500 ms… imprimir a figura na tela eu sei, mas como q eu faço pra ela sumir apos 500 ms???
abraços

14 Respostas

A

Amigo,

Vc pode usar o método Thread.sleep(<“inteiro indicando o numero de milisegundos que a thread deve dormir”>).

Sendo assim vc pode escrever a sua classe ou método para primeiro mostrar a imagem, coloca a thread para dormir e depois tirar a imagem.

Vc também pode dar uma olhada na documentação da linguagem para ver como as api de manipulação de imagem pode ajudá-lo caso oque vc queira seja um pouco mais complicado do que isso…

Abraços
Andre Fonseca

R

eh, eu preciso d algo um pouco mais complicado… na verdadee oq eu quero fazer eh:
vai aparecer uma figura no monitor, se o usuario apertar a seta pra direita, a figura some, se ele nao apertar a figura tem q sumir depois de 500 ms!

S

Faça assim:

Crie uma outra classe que servirá como monitor (indica quando os 500ms se passou). Nela você terá algo parecido com:

Class MonitorTempo extends Thread{
  private boolean contagemFinalizada = false;
  public void run(){
    Thread.sleep(500);
    contageFinalizada = true;
  }
  public boolean isContagemFinalizada(){
    return this.contagemFinalizada;
  }
}

Já na classe que controla a exibição da imagem no monitor você pode ter algo como:

MonitorTempo monitor = new MonitorTempo();
monitor.start(); //começa a contar os 500ms
while(!monitor.isContagemFinalizada()){
   //espera que o usuário aperte uma seta
}
//neste ponto se ele não fez nada você pode sumir com a figura

É só uma idéia. Espero que ajude…

R

eu fiz antes sem a parada da seta, pra testar e fiz assim:

labelNum.setText("+");
try {
	Thread.sleep(500);
} catch (InterruptedException e1) {
	// TODO Auto-generated catch block
	e1.printStackTrace();
}
labelNum.setText("0");

mas ta dando errado… qdo o programa entra nessa parte, nao aparece o “+”, e demora uns 10 segundos pra aparecer o “0”!!

A

Ocorre algum tipo de exceção ?

Seria interessante se vc pudesse dar um visão maior do seu programa .
Uma coisa que vc poderia fazer é “debugar” o código colocando um break point na linha onde seta o label pela primeira vez.

Se vc estiver usando o eclipse ou netbeans é bem fácil de fazer isso: é só dar um duplo click na linha que ela já marca e mandar rodar o programa em debug.

Abraços

R

na verdade oq eu tenho eh um botao q qdo apertado roda esse codigo:

labelIni1.setVisible(false);
labelIni2.setVisible(false);
labelIni3.setVisible(false);
buttonIni.setVisible(false);
abelNum.setVisible(true);					
labelNum.setText("+");
					
try {
	Thread.sleep(500);
} catch (InterruptedException e1) {
	e1.printStackTrace();
}
labelNum.setText("0");

mas oq eu percebi eh que o programa nao vai atualizando oq ta no monitor o tempo todo… ele espera chegar ate o final do codigo pra atualizar o monitor… teria algum comando que force o programa a atualizar oq ta impresso no monitor antes dele chegar no spleep?
ele tava deemorando 10 segundos pq eu tinha botado dentrtro dee um for… e como cada vez q entrava no for tinha o sleep dee 500 ms ele deemorava 10 segundos para chegar ate o final no codigo do botao!
abraço

S

No exemplo que eu mostrei antes, a Thread que espera os 500ms fica separada da interface, que por sua vez pode executar outros comandos enquanto espera esse tempo passar, justamente pra não dar o aspecto de “congelamento” nela.

R

eu usei sua classe “Monitor Tempo” e no lugar do

try { Thread.sleep(500); } catch (InterruptedException e1) { e1.printStackTrace(); }
eu botei:

monitor.start(); //começa a contar os 500ms
					 while(!monitor.isContagemFinalizada()){
					    
					 }

e deeu na mesma… continua sem funcionar… =/
ele demora os 500ms e ai a aparece o 0 direto

U

este é o problema de programadores java …
desacostumaram a programar para desktop …
ou tu usa um timer para isto, que vai chamar um metodo teu depois de x milisegundos.
ou tu usa o SwingWorker para disparar as tuas atualizações na thread apropriada :smiley:

programação WEB alem de não permitir que usemos threads nos deixa mal acostumados :smiley:

R

tá certo.Desculpa a idiotice, mas como que eu faço isso ?

R

niguem??

R

ai galera, eu consegui… eu fiz assim:

labelIni1.setVisible(false);
labelIni2.setVisible(false);
labelIni3.setVisible(false);
buttonComecar.setVisible(false);
labelNum.setVisible(true);					
labelNum.setText("+");					
									
Runnable wait = new Runnable() {
        public void run() {  
	try {
		Thread.sleep(500);
	} catch (InterruptedException e1) {
		e1.printStackTrace();
	}    
	
	labelNum.setText("0");
        }
};
SwingUtilities.invokeLater(wait);

mas agora to com outro problema… depois de executar esse codigo, o objetivo eh que o usuario pressione a barra de espaço assim que o numero 0 apareça na tela, mas eu percebi que, dedpois de executar esse codigo o meu programa nao reconhece mais o teclado, soh reconhece se minimizar e depois maximizar de novo o programa… alguem sabe por que isso acontece???

R

alguem pode me ajudar???
vlw

R

ninguem poded me ajudar?

Criado 15 de junho de 2006
Ultima resposta 26 de jun. de 2006
Respostas 14
Participantes 4