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).
R
ramilitani
vc sabe como posso fazer isso?
o que acontece é realmente isso, congela a interface e fica no loop, travando o programa.
mensagemVisor("Entre com o numero Identificação");//umamensagemaparecenojFormattedTextField//nessahoraeledeveusarainterfacedotecladoclicandonosbotoes(0a9)paragravaronumero.while(btEntraAtivado==false){//btEntraAtivadoéavariavelqvaiserinicializadacomotruecasotenhaclicadonobotaoentra}nIdentificacao=c;//céavariavelqvaiserinicializadacomovalorpegodojFormattedTextFieldescrever.escreverArquivo(nIdentificacao);//escreveumarquivocomainformaçãodaidentificação
R
ramilitani
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.
M
marcobiscaro2112
Por que você não usa um ActionListener no botão? Essa seria a maneira correta.
L
lina
Oi,
O que você quer é uma execução em paralelo.
Então o mais indicado seria a utilização de thread.
Tchauzin!
R
ramilitani
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(NullPointerExceptione){System.err.println(e);}}//GEN-LAST:event_jBEntraActionPerformedclassjBEntraActionListenerimplementsActionListener{publicvoidactionPerformed(ActionEvente){btEntraAtivado=true;atribuotrueàvariávelqéacondiçãodowhile.}}porémissonãoestáfuncionando.Elecontinuadentrodowhileenãoativaainterfacegráfica
M
marcobiscaro2112
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?
B
barney
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
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.