Olá pessoal!
Estou criando uma aplicaçãozinha bem básica de caixa bancário para deficientes visuais, que funciona como um bankphone… tipo uma voz fala ‘digite 1 para consultar seu saldo, 2 para isso, 3 para aquilo’, etc etc, como uma URA.
Para implementar, pus um keylistener em um JFrame (vazio por enquanto) que fica em full screen, aí ele recebe o que o usuário digitar no teclado numérico, e faz o que tem que fazer. A parte de tocar e receber o keylistener está funcionando legal. Mas estou com um problema de lógica…
Logo que executo o programa, ele precisa tocar ‘digite 1 para isso, 2 para aquilo…’ etc. Até aí tudo bem, eu faço ele tocar um .wav que gravei. Mas como faço pra que ele toque, espere alguns segundos e toque novamente no caso de não houver entradas do usuário, e cancele isso caso o usuário digite algo? Além disso, tenho que por um contador de erros, depois do 3o. erro ele toca uma mensagem e dá dispose no frame.
Tentei porcamente usar um Thread.Sleep dentro de um for, mas o keylistener não ‘cancela’ o for caso receba entrada
Alguma idéia?
Segue o código:
import java.awt.GraphicsEnvironment;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class FrameDef extends javax.swing.JFrame implements Runnable {
Tocador t; //Classe que toca os sons.
private String transacao="";
int contaid = 123;
public FrameDef() {
INIFrame();
GraphicsEnvironment.getLocalGraphicsEnvironment().
getDefaultScreenDevice().setFullScreenWindow(this);
}
private void INIFrame() {
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setAlwaysOnTop(true);
setUndecorated(true);
this.addKeyListener(new KeyListener() {
public void keyTyped (KeyEvent e) {
t.play(e.getKeyChar()+"");
if (e.getKeyChar()=='1') {
dispose();
transacao="SAQUE";
System.out.println("Opção Saque escolhida");
new Senha(transacao, contaid).run(); //vai pra próxima classe, que é um frame tb
}
else if (e.getKeyChar()=='2') {
dispose();
transacao="CONSULTASALDO";
System.out.println("Opção Consulta Saldo escolhida");
new Senha(transacao, contaid).run();
}
else {
t.play("Opcao Invalida");
}
}
public void keyPressed(KeyEvent e) {}
public void keyReleased (KeyEvent e) {
if (e.getKeyChar() == KeyEvent.VK_ESCAPE)
{
System.exit(0);
}
}
});
}
public void run() {
setVisible(true);
System.out.println("Início");
t = new Tocador();
for (int c=0;c<3;c++) {
t.play("Digite 1 para saque e 2 para consultar seu saldo"); //toca o som usando jmf e espera acabar de tocar com Thread.Sleep
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
System.exit(0);
}
}
t.play("Numero de tentativas esgotado");
System.out.println("Timeout");
dispose();
}
}