Erro no JOptionPane.showInputDialog

12 respostas
oitathi

Gente, eu tenho um JOptionPane.showInputDialog, que pergunta uma determinada coisa ao usuário. Mas se for clicado o botão cancela, o programa cai. Como eu tenho que tratar isso?
Obrigada

12 Respostas

E

Você normalmente precisa checar o valor de retorno. Se for null, então o usuário cancelou a entrada.

oitathi

Mas como eu tenho q fazer para se no caso de a pessoa clicar em cancel, acontecer a mesma coisa de quando ela clica no x da janela? ou seja, fechar a janela e pronto?

E

Pois é, ocorre exatamente a mesma coisa.

oitathi

não entendi…
eu tenho o seguinte código:

String entrada;
                entrada = JOptionPane.showInputDialog("Digite o ID do carro");
                if (entrada==null){
                  // fazer com a janela feche     
                }
                NovosDados nd = pesquisaManual(entrada);
                if (nd == null) {
                    JOptionPane.showMessageDialog(null, "Veiculo nao identificado");
                }//end if
                else {
                    constroiBottom(entrada);
                }//end else

Como eu faço pra janela fechar?

E

Primeira coisa: evite, dentro da medida do possível, passar null como primeiro parâmetro do JOptionPane.showInputDialog. É que se você fizer isso, e por algum motivo o showInputDialog ficar escondido “atrás” do seu JFrame ou JDialog, você vai entrar em apuros.

O correto, em 99% dos casos, é passar uma referência para seu JFrame ou JDialog. Normalmente é alguma coisa como “this” ou então “NomeDaClasseQueEstendeJFrame.this”.

Segunda coisa: não tem como você saber se a pessoa clicou em Cancelar ou fechou seu JOptionPane.showInputDialog pelo botão de fechar. Em ambos os casos, ele retorna null.

Terceira coisa: acho que agora entendi. Alguém resolveu fechar sua aplicação (classe que estende JFrame ou JDialog, sei lá o quê) pelo botão de fechar. Nesse caso, procure aqui no fórum, porque você precisará adicionar um WindowListener para pegar o evento de fechar a janela (use um WindowAdapter para isso. É só procurar aqui no fórum, ou se você não tem preguiça de usar o Google Translator para ler o tutorial oficial da Sun, em

http://download.oracle.com/javase/tutorial/uiswing/components/frame.html#windowevents

(algo que todo mundo tem de fazer desde o começo - infelizmente não dá para aprender Swing só de usar o NetBeans ou Eclipse.)

oitathi

Não amigo, achop q nós não estamos nos entendendo.
Assim, eu tenho uma caixa de dialogo. quando eu clico em cancel, o prgrama cai. Tudo bem, a janela se fecha, mas o programa cai.
Como eu devo proceder para quando o botão cancel for pressionado, não gere um erro?
Obrigada

E

Isso não deveria ocorrer - a menos que você esteja recebendo um NullPointerException porque não tratou o caso em que a String retornada é null, e você não tratou o caso em que a string é null. Poste o stack trace, por obséquio. (Não dê um duplo clique para iniciar seu programa; em vez disso, rode-o a partir de uma linha de comando para poder ver o stack trace).

oitathi

dah erro de nullPointerException mesmo…
Eu não entendi como eu tenho que tratar quando a entrada for nula…

E

Agora é só usar sua cabeça. Quando o usuário cancelar ou fechar o JOptionPane, sem fazer nada, o que você quer fazer com seu programa?

a) Mostrar uma mensagem do tipo “Seu burro. Podia fazer o favor de digitar o ID do carro?” e então tentar de novo,
b) Mostrar uma mensagem do tipo “Você não quer digitar o ID do carro? Então vou sair do programa” e então sair do programa.

É questão de você usar um pouco a cabeça, e usar um simples “if”. (No caso “a)”, você precisa de um do…while)

oitathi

mas amigo, o q eu digitei no meu código?

if (entrada==null){   

  this.dispose()

  }

Soh q não funciona

E

dispose, sozinho, não sai do seu método. Só fecha a janela, o que não é a mesma coisa que retornar de seu método.
O que ocorreu é que você continuou executando o método e em outra linha ele deu o NullPointerException. No seu caso, imediatamente depois de dispose, você pode dar um “return” para sair do método, ou se você quer sair do programa, pode dar um System.exit (0).

oitathi

Valeu!!! Tava faltando o return!!!
Obriagada

Criado 3 de agosto de 2010
Ultima resposta 4 de ago. de 2010
Respostas 12
Participantes 2