Tenho um programa de votação que quando sai um voto ele para por dez segundos… uso o Thread.sleep(10000); para não fazer nada… mas nesse tempo se eu clicar em algum objeto que tenha evento de mouse, ele espera os 10 segundos e ai gera o evento, existiria um outro comando para prender mesmo, ou um comando para desabilitar o evento??
Oie!
Tenta usar o método wait(10000) da classe Object:
synchronized (this) {
try {
wait(10000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
E no evento do clique vc coloca:
synchronized (this) {
notify();
}
P.S.: Tenta colocar esses dois trechos na mesma classe… eu ainda não consegui colocar em classes diferentes.
coloquei, mas não funcionou!! tipo eu clico em uma foto e ele gera o evento do mouse, ai entra nessa espera de 10 segundos, se nesse tempo eu clicar na foto de novo, ele não faz nada, mas quando acaba o tempo ele gera o evento novamente, é como se ele estivesse esperando o tempo acabar para gerar o evento… eu queria que nesse tempo em nada que eu clicasse gerasse o evento depois! ele tá guardando o evento para gerar depois que acabar o tempo de espera!
vc colocou no evento?
Posta o código aí.
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);
synchronized (this)
{
wait(10000);
notify();
}
}
catch (InterruptedException ex)
{
ex.printStackTrace();
}
catch (FileNotFoundException ex)
{
ex.printStackTrace();
}
}
}
Cara já coloquei o notify(); antes e depois do wait(10000); e nada, já coloquei o notify(); no inicio do evento, também nada… o wait(10000) tem que ficar naquele lugar ali memo!
seguinte, o método wait(10000) serve para sua Thread parar durante um tempo de 10 segundos, OU até vc usar o método notify(), que notifica o método wait() que ele pode continuar.
Vc não pode colocar o notify() logo abaixo do wait().
O que vc pode fazer é colocar o código com o wait(10000) na sua votação:
synchronized (this) {
try {
wait(10000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
e adicionar um evento para o clique do mouse no seu formulário principal e adicionar esse código:
synchronized (this) {
notify();
}