Erro no JOptionPane.showInputDialog

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

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

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?

Pois é, ocorre exatamente a mesma coisa.

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?

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

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

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

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

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)

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

 if (entrada==null){   

  this.dispose()

  }   

Soh q não funciona

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

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