Esperar por um evento ser realizado

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

vc sabe como posso fazer isso?

o que acontece é realmente isso, congela a interface e fica no loop, travando o programa.

Se você postar o código fica mais fácil ajudar.

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

o problema é q entra no while e não sai mais.
preciso pegar o q tem dentro do JFormattedTextField, pra depois disso continuar a execução do programa.

Por que você não usa um ActionListener no botão? Essa seria a maneira correta.

Oi,

O que você quer é uma execução em paralelo.
Então o mais indicado seria a utilização de thread.

Tchauzin!

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.

Alguma dica?

olha fazendo por actionListener ficou assim:

private void jBEntraActionPerformed(java.awt.event.ActionEvent evt) throws FileNotFoundException, IOException {//GEN-FIRST:event_jBEntraActionPerformed

    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.