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