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
Como contar o tempo?
14 Respostas
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
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!
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…
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”!!
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
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
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.
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
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 
programação WEB alem de não permitir que usemos threads nos deixa mal acostumados 
tá certo.Desculpa a idiotice, mas como que eu faço isso ?
niguem??
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???
alguem pode me ajudar???
vlw
ninguem poded me ajudar?