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!
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
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
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
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.
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.