Existe alguma forma de o programa não fazer nada por alguns segundos?

11 respostas
vitorkgb

Galera, estou fazendo um programa onde necessito que o meu programa não gere evento não faça nada por uns 10 segundos… já tentei usar os comandos

wait(10000);

e

Thread.sleep(10000);

mas ambos o que fazem é parar o sistema e por exemplo se dentro destes 10 segundos eu gerar um evento, quando acabar os 10 segundos ele executa esse evento, eu quero é que nesse tempo ele não gere evento nenhum, nem para executar depois do tempo que ele ficou dormindo!

11 Respostas

rdgms

Cara ficou meio confuso a sua pergunta…

Thread.sleep(10000);

isso vai para a thread atual por 10 segundos!

vitorkgb

ele para o sistema por 10 segundos… mas se vc tiver no sistema um evento de mouse ao clicar em uma foto (Jlabel), se nesse tempo eu clicar na foto, ele não executará de momento o evento, mas depois dos 10 segundos de pausa, o evento será acionado, parece que o sistema só espera os 10 segundos para executar qualquer coisa… eu queria algo que parasse realmente o sistema, nem evento gerasse

rdgms

Entendi cara… eu nunca havia feito esse teste com a Thread… faz um logica para remover os listenner antes…
assim:

obj.removeBlablaListenner(this);

vitorkgb

esse Thread.sleep(10000); ou o wait(10000); são fds… mesmo eu removendo o evento antes da espera… coloco para adicionar depois da espera… e nada… parece que ele executa os comandos mesmo com a espera, mas só mostra o resultado depois, sinistro

rdgms

Cara isso é muito estranho porque Thread.sleep deveria parar a thread atual.
Posta o seu codigo aih…

vitorkgb
public void mouseClicked(MouseEvent evt)
    {
           new TocaSom("SomInicioUrna");

           Object[] options = { "Sim", "Não" };
       		 	int resp =  JOptionPane.showOptionDialog(null, " Confirma voto em " +
                                                               candEscolhido + "?", "Confirmação de Voto",
       		             JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE,
       		             null, options, options[0]);

        if(resp == 0)
        {
            CandidatoDAO candidatoDAO = new CandidatoDAO();
            new TocaSom("SomFinalUrnaEletronica");
            
            try
            {
                 candidatoDAO.gerarVotoCandidato(candEscolhido);

                 JOptionPane.showMessageDialog(null, "Voto confirmado com sucesso!", "Confirmado", 1);

                painelVotacao.getjLabelCand1().removeMouseListener(this);
                 Thread.sleep(10000);
                 
                 painelVotacao.getjLabelCand1().addMouseListener(this);
                 
            }
            catch (InterruptedException ex)
            {
                 ex.printStackTrace();
            }
            catch (FileNotFoundException ex)
            {
                ex.printStackTrace();
            }

        }
    
      
    }

engraçado que aquele removeMouseListener… ele remove certinho se eu não colocar o addMouseListener… se eu colocar ele executa evento mesmo na pausa dos 10 segundos… só que só é mostrada o evento depois dos 10 segundos

rdgms

Hum… muito estranho cara…
quando você debuga o que acontece?? ele para no sleep? não tem nenhum outro obj com mouseListenner??

maquiavelbona

Se você acha muito complicado limpar os listeners, faça o simples: coloque uma janela modal transparente com eventos nulos nela. Assim, enquanto a thread estiver dormindo, a janela recebe todos os eventos e não dispara nada.

Até!

laudenpower

Utilize o Timer do pacote java.utils, dessa forma você pode colocar um contador dentro desse timer que vai te permitir criar um if encapsulando o que você não quer que seja executado.
Tipo o timer começa a incrementar a variável segundos até chegar no limite enquanto isso uma variável booleana trava o processo, entende?

De uma olhada melhor na api do Timer que você vai conseguir chegar aonde eu disse.

Espero ter ajudado.

lucamartins

Opa!
Cara, a sua aplicação é multi ou single thread?

Eder_Peixoto

Sugestão:

  1. Altere o GlassPane da tua aplicação para um JPanel, que deverá filtrar todos os eventos;
  2. Inicie sua Thread;
  3. Após a Thread acordar, retorne ao GlassPane antigo, para voltar a escutar os eventos.
Criado 29 de julho de 2009
Ultima resposta 31 de jul. de 2009
Respostas 11
Participantes 6