Olá !!!
Estou tentando implementar um actionListener que quando um botão é acionado, atribui valor a uma variável booleana botaoAcionado como true;
No caso essa variavel seria responsavel por manter um laço while rodando enquanto fosse false, e quando true, sairia do laço e continuaria a execução do método main.
Porém quando entra no while, não consigo mais interagir com o painel… fica rodando o laço infinitamente e não consigo acionar o botao.
Alguém pode me ajudar?
No caso preciso esperar q esse botao seja acionado, pois só depois dele acionado é que tenho carregada uma variável q vou precisar no decorrer do programa.
Se você está executando uma tarefa repetitiva, você precisará de uma segunda Thread para tal.
Isso porque a Thread de pintura da interface gráfica fica preocupada em realizar seu loop e “esquece” de pintar a interface gráfica e aceitar seus eventos (por isso a interface congela).
private void jBSimuladorActionPerformed(java.awt.event.ActionEvent evt) throws IOException {//GEN-FIRST:event_jBSimuladorActionPerformed
Arquivo escrever = new Arquivo();
PacsClient m = new PacsClient();
String senha = null;
int sala = 0;
mensagemVisor("Entre com o numero Identificação"); // uma mensagem aparece no jFormattedTextField
// nessa hora ele deve usar a interface do teclado clicando nos botoes( 0 a 9) para gravar o numero.
while(btEntraAtivado == false){ // btEntraAtivado é a variavel q vai ser inicializada como true caso tenha clicado no botao entra
}
nIdentificacao = c; // c é a variavel q vai ser inicializada com o valor pego do jFormattedTextField
escrever.escreverArquivo(nIdentificacao); // escreve um arquivo com a informação da identificação
oi é isso mesmo… o problema q naum sei usar thread direito.
tava pensando em dentro do while colocar um tempo pro thread, e enquanto isso volta a execução para a interface, pro usuario teclar os digitos. depois disso volta pro while e finaliza. O problema q naum sei como fazer isso.
try{
if(c != null){
nIdentificao = c;
num = Integer.parseInt(c);
ftVisor.setText(null);
System.out.println(num);
//num = 0;
c = null;
sala = null;
}
if(sala != null){
numsala = Integer.parseInt(sala);
ftVisor.setText("Nro da Sala?");
System.out.println(numsala);
//num = 0;
sala = null;
}
}
catch(NullPointerException e){
System.err.println(e);
}
}//GEN-LAST:event_jBEntraActionPerformed
class jBEntraActionListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
btEntraAtivado = true; atribuo true à variável q é a condição do while.
}
}
porém isso não está funcionando. Ele continua dentro do while e não ativa a interface gráfica
Você não precisa de while quando usa actionListener nesse caso. Pense no seguinte: seu while está travando a aplicação até que o botão seja pressionado; depois continua. E você sabe quando o botão é pressionado! Quando o actionPerformed é chamado.
Então, porque você não remove o while e coloca o código a ser executado depois dele dentro do actionPerformed do botão?
cara acho que entendi mais ou menos oq vc quer…
vc tem uma ´variável booleana
e tem um laço de repetição "while"
quando essa variável for “true” ele continua, e false ele sai.
Bem se é isso mesmo pq vc não faz assim
do {
if(condicao == true) {
variavel = false;
}
} while (variavel == true)
assim dessa maneira acho q naum dá. Preciso ir verificando mesmo se o evento foi acionado.
Pq além dessa primeira condição, a outras. Então o botão entra vai servir não somente pra entrada de um tipo de dado específico.
Por exemplo:
quando o botão entra é acionado, é armazenado o número de identificação em um arquivo.
Depois disso tenho q mostrar uma outra mensagem no visor, como: Entra com a senha, e espera o botão entra se acionado novamente e aí criando o arquivo para a senha.
esse dado vai ser guardado em um outro arquivo.
Se fizer todo o código no actionPerformed ele retornará à mesma mensagem do início, ou seja, ao invés de guardar a senha em um arquivo que guarda elementos senha, vai guardar a senha em um arquivo q guarda elementos do tipo identificação.
Não sei se me entendem, mas assim não tá funcionando da maneira que gostaria.
Como forma de resolver isso criei janelas (jOptionPane) q vão esperar o usuario digitar e aí sim guardar o valor, porém essa interação com o usuário deveria ser feita na interface do teclado e não por meio de uma abertura de uma janela.