[RESOLVIDO] Como impedir o JOptionPane de fechar minha JFrame após clicar em "Ok"?

6 respostas Resolvido
programaçãojava
N

Olá, estou fazendo um trabalho da faculdade, e estou com o seguinte problema:

toda vez que cometo um erro para que o JOptionPane.showMessageDialog apareça dando o aviso, e clico em “Ok”, o JOption fecha e leva o programa junto, simplesmente fecha a janela, e eu queria que apenas avisasse que o erro foi cometido e voltasse para a JFrame sem nenhuma alteração.
Eis meu codigo;

dao.consultar2(bean);
       int i=bean.getSenhaExclusiva();
       
       if(i!=0) {
    	   try {
    	   int op =Integer.parseInt(JOptionPane.showInputDialog(null,"Digite sua senha exclusiva:","Quase ...",JOptionPane.DEFAULT_OPTION));
    	   
    	   if(op==i) {
    		   
    		   	JOptionPane.showMessageDialog(null, "Bem vindo!");
    		   l.windowClosing();  		   
    	  	}
    	  			  		
    	   if(op!=i) {
    		   
    		  JOptionPane.showMessageDialog(null, "Senha incorreta!","Atenção!",JOptionPane.WARNING_MESSAGE);  
    	   }

    	   }catch(Exception ex) {
    		   JOptionPane.showMessageDialog(null, "O campo da senha exlusiva deve ser preênchido corretamente!","Atenção!",JOptionPane.WARNING_MESSAGE);  
    	   }
       }else {
    	   
    	   JOptionPane.showMessageDialog(null, "Bem vindo usuário!","Olá!",JOptionPane.WARNING_MESSAGE);
    	   System.exit(0);
       }

Alguém sabe uma forma de fazer isso acontecer?

Agradeço desde já a atenção.

6 Respostas

J

Você mata a aplicação completamente ao executar este comando após a mensagem de bem vindo!
Acredito que removendo esta linha já deva resolver o seu problema!

N

A intenção desse ultimo “bem vindo!” é justamente essa, porque esse é tratado como um usuário comum e eu quero apenas simular que ele entrou no sistema a qual ele é permitido acessar, e eu sei que eu deveria usar o “dispose()” mas parece que esse comando só funciona com botões, e isso é outra treta que ta me deixando doido!
O problema é nesses dois JOption’s aqui:

if(op!=i) {
    		   
    		  JOptionPane.showMessageDialog(null, "Senha incorreta!","Atenção!",JOptionPane.WARNING_MESSAGE);  
    	   }

    	   }catch(Exception ex) {
    		   JOptionPane.showMessageDialog(null, "O campo da senha exlusiva deve ser preênchido corretamente!","Atenção!",JOptionPane.WARNING_MESSAGE);  
    	   }

Eu preciso que eles sejam apenas um aviso. E depois que clicado no “ok” deles, apenas não faça nada até o usuário preencher o campo, e tem que preencher com uma senha existente, aí sim vai entrar no:

if(op==i) {
    		   
    		   	JOptionPane.showMessageDialog(null, "Bem vindo!");
    		   l.windowClosing();  		   
    	  	}

(Obs: Esse “windowClosing()” é apenas uma classe que criei pra fechar a conexão com o banco e abrir outro JFrame e “l” é o objeto da minha classe)

N

é… parece que vou ter que usar JDialog msm :confused:

D
Solucao aceita

Acho que é problema de lógica e organização:

int i = bean.getSenhaExclusiva();
if (i == 0) loginUsuarioComun();
else loginUsuarioExclusivo(""+i);

void loginUsuarioExclusivo(String senhaCadastrada) {
  do {
    String senhaDigitada = JOptionPane.showInputDialog(null,"Digite sua senha exclusiva:","Quase ...",JOptionPane.DEFAULT_OPTION);
    if (senhaDigitada.equals(senhaCadastrada)) {
      JOptionPane.showMessageDialog(null, "Bem vindo!");
      l.windowClosing();
      return;
    } else {
      JOptionPane.showMessageDialog(null, "Senha incorreta!","Atenção!",JOptionPane.WARNING_MESSAGE);
    }
  } while (true);
}
N

Mano… eu fiquei horas tentando fazer isso dar certo até pensar em usar o “do while”, e certeza que eu ia ficar mais uma par de horas tentando, pra pelo menos chegar perto dessa sua lógica, ainda tenho muito pra aprender kkkk, vlw mesmo!!! Me ajudou muito mesmo!

obs: pra que serve esse true do } while (true); ? VLW!!!

D

O true serve para repetir para sempre (loop infinito). É equivalente a:

boolean chave = true;

do {
  /* ... */
} while(chave == true);

ou mais simples

boolean chave = true;
do {
} while(chave);

Usei o return para sair do loop e terminar o método, poderia usar o break que sai do loop sem terminar o método em vez do return.

Criado 16 de fevereiro de 2018
Ultima resposta 17 de fev. de 2018
Respostas 6
Participantes 3