Trabalho com desenvolvimento de PDV (frente de loja) e estou implementando um leitor biométrico.
O leitor funciona para algumas funções que o operador de caixa não tem permissão. Com isso o sistema informa na tela “aguardando digital” e o supervisor com sua digital libera o acesso… até aí tudo OK.
Meu problema é que quando eu entro numa operação onde ele fica aguardando essa digital, eu tenho que ao mesmo tempo possibilitar o operador cancelar o procedimento e voltar para tela anterior… que no caso é feito através da tecla ESC
O único jeito que eu consegui fazer isso foi por meio de Thread… ou seja… vou ter uma Thread que vai ficar por conta da captura da digital, enquanto a Thread principal captura as ações que vem do teclado (das teclas digitadas).
A questão é que o método que chama a Thread que fica responsável pela captura da digital segue todo o seu fluxo, independente da Thread já ter encerrado ou não… e isso tem me dado problemas…
sei que posso usar o método join… ou seja… o método só segue seu fluxo depois que a Thread da captura da digital foi finalizada, e é de fato isso que eu quero…
mas o problema é que quando ele entra no join()… digamos que ele fica travado… ele trava minha aplicação naquele ponto… e com isso o meu addListener ( pra pegar a ação do teclado) se torna inútil… porque ele fica preso nesse join();
preciso de fazer com que meu código não fique preso há nenhum método, pra que quando o operador apertar ESC, ele possa entender essa ação do teclado e fazer o que tem que fazer
e ao mesmo tempo tenho aguardar a Thread que aguarda a digital finalizar… pra que meu código possa seguir seu fluxo…
1 curtida
Quando esse requisito da biometria é acionada, alguma janela nova é aberta?
não uma nova janela… mas uma nova classe é instanciada
que é a ControladorValidacaoDigital
ela seta a mensagem que fica no topo do PDV para “AGUARDANDO DIGITAL…”
e aguarda a captura do mesmo…
Como eu disse, até fiz funcionar… o problema é que eu preciso usar o join que sair do método somente quando a thread é finalizada…
mas essa benção do join trava a minha aplicação não permitindo meu addListener funcionar…
Se eu faço isso
ThreadB b = new ThreadB();
b.start();
e aperto a tecla ESC, ele funciona… ele consegue detectar ação do meu teclado e consegue cancelar
Se eu faço isso
ThreadB b = new ThreadB();
b.start();
try
b.join();
catch
e aperto a tecla ESC, ele já não funciona… por que? porque ele fica “travado” nesse join… tanto que quando eu vou debugar, ele não passa pra linha de baixo enquantoa thread não é finalizada…
Eu perguntei sobre a nova janela, pois, se estivesse abrindo uma nova, vc poderia usar ela para detectar o ESC e, então, chamar um interrupt
para liberar o join e fechar a janela.
Mas entendi o problema.
como disse, eu até já fiz funcionar… consigo passar a digital, e ao mesmo tempo cancelar com o ESC… o problema é que preciso usar o join();
Somente o join() vai me dar a garantia que o processo da captura da digital já foi concluído, e assim seguir o fluxo normal do restante do código…
O problema é esse join() mesmo… ASSIM que o código entra nele… ele trava tudo… é como se ele ficasse preso nele… tanto que quando vou debugar, ele não passa pra linha de baixo enquanto a thread não finaliza… e com isso, ele não consegue detectar meu ESC… por estar preso nesse join();