package treinando;
import static javax.swing.JOptionPane.*;
public class Teste {
public static void main(String[] args) {
while(true)
{
String nome = showInputDialog(null,"Forneça um nome");
if(nome.equals("") || nome == null) // por que essa condição gera erro java.lang.NullPoiterException ? invertendo de posicao da certo!
{
confirmCancel();
showMessageDialog(null,"Voce nao digitou algo ! ","Nenhum Dado Fornecido",INFORMATION_MESSAGE);
continue;
}
showMessageDialog(null,nome);
break;
}
}
public static void confirmCancel(){
int confirm = showConfirmDialog(null,"Dejesa cancelar ? ","Cancelamento",OK_CANCEL_OPTION);
if(confirm == OK_OPTION)
{
showMessageDialog(null,"Cancelado pelo usuario","Finalizando...",INFORMATION_MESSAGE);
System.exit(0);
}
}
}
[RESOLVIDO]Erro no meu codigo, por que?
21 Respostas
Eu que pergunto. Não podemos oferecer ajuda se você não der mais detalhes, como por exemplo, a mensagem de erro emitida pelo compilador, o objetivo do programa, e etc.
Ta dando Null Pointer nessa comparação porque voce está comparando um uma string nula com uma string vazia primeiro. Quando inverte e dá certo é por que a comparação == null retorna true, e assim ele não faz a proxima comparação pois, voce está usando o operador lógico OU, que ao meu ver está totalmente errado no seu codigo.
Inverta as comparações e troce seu OU por um E.
[quote]
kkk, tipo
if(nome.equals("") || nome == null) // por que essa condição gera erro java.lang.NullPoiterException ? invertendo de posicao da certo!
Messagem de erro java.lang.NullPoiterException
O objetivo do programa é eu testar, a condição de o usuario clicar no botão ok da caixa de entrada, sem digitar algo!
Ou clicar no botão cancelar da caixa de entrada, e invocar o metodo confirCancel para cancelar!
Quando eu mudo de posição a dondição, dessa forma :
if(nome == null || )nome.equals(" ")
da certo, funciona normal.
No java temos dois tipos de teste, um assim: if(nome.equals("") | nome == null) que testa o lado esquerdo e mesmo o retorno sendo true e ainda testa o lado direito.
E outro assim: if(nome.equals("") || nome == null) Que testa o lado esquerdo e se o retorno for true, ele nem testa o lado direito, pq no operador OU basta um ser verdadeiro.
No caso do seu teste, ele da nullpointer por que nome.equals("") não é vazio e sim nulo. Mas caso você inverta o teste e testar nome == null ele retorna true, então não testa o lado direito e assim não da nullpointer.
No java temos dois tipos de teste, um assim: if(nome.equals("") | nome == null) que testa o lado esquerdo e mesmo o retorno sendo true e ainda testa o lado direito.
E outro assim: if(nome.equals("") || nome == null) Que testa o lado esquerdo e se o retorno for true, ele nem testa o lado direito, pq no operador OU basta um ser verdadeiro.
No caso do seu teste, ele da nullpointer por que nome.equals("") não é vazio e sim nulo. Mas caso você inverta o teste e testar nome == null ele retorna true, então não testa o lado direito e assim não da nullpointer.
[quote]
Nao entendi muito bem, tipo, quando o usuario nao digita nada na caixa de entrada, e clica no botao OK, a variavel recebe um conteudo vazio?
Porque testei aqui, dessa forma:
String nome = JOptionPane.showInputDialog(null, " Forneça o nome da pessoa ");
E crie usei o método JOptionPane.showMessageDialog(null, nome); para apresentar o valor da variavel nome.
O resultado é uma caixa de mensagem vazia, sem nenhum conteudo!
Tabem testei quando o usuario, nao digita nenhum nome, na caixa de entrada, e clica no botao cancelar.
Usando novamente JOptionPane.showMessageDialog(null, nome); para apresentar o conteudo da variavel, e tambem é vazio, nao aparece nada!
Fiz essa condição :
if(nome == null || )nome.equals("")
Pensando o seguinte, si o usuario não digitar nada na caixa de entrada, e clicar no botao cancelar, invoca o método confirmCancel.
Si o usuario não digitar nada e clicar no botão OK da caixa de entrada, aparecerá a mensagem:
showMessageDialog(null,"Voce nao digitou algo ! ",“Nenhum Dado Fornecido”,INFORMATION_MESSAGE);
Mas testando aqui, nao deu certo !!
Dessa forma ae ele ja chama o metodo confirmCancel, mesmo que o usuario nao digite nada e clique no botao OK, como si ele clicar no botao cancel
E si o usuario
Pelo que acontece no seu próprio código já dá pra entender que quando nada é digitado, a string nome recebe valor nulo. Lembre-se: Nulo é diferente de vazio.
Edit - Para de colocar sua propria mensagem na tag quote, manolo! O_O
Pelo que acontece no seu próprio código já dá pra entender que quando nada é digitado, a string nome recebe valor nulo. Lembre-se: Nulo é diferente de vazio.Edit - Para de colocar sua propria mensagem na tag quote, manolo! O_O
Não estou entendendo essa questão de NULO, de VAZIO, ja estou perdido!
Tipo eu testei, quando o usuario nao digita nada e clica em OK, a variavel recebe valor NULO, é isso?
Entao porque quando eu crio o metodo showMessageDialog para mostrar o conteudo da variavel, aparece caixa de mensagem sem nada ?
Tipo eu testei, quando o usuario nao digita nada e clica em OK, a variavel recebe valor NULO, é isso?
Isso.
Por que não tem nada na variavel pra ser mostrado, oras O_O
String NULA = NÃO TEM VALOR ALGUM
String VAZIA = “” - Não é nula, mas está vazia
String NÃO VAZIA = " " - Note que tem um espaço dentro das aspas.
Isso.
Por que não tem nada na variavel pra ser mostrado, oras O_O
String NULA = NÃO TEM VALOR ALGUM
String VAZIA = “” - Não é nula, mas está vazia
String NÃO VAZIA = " " - Note que tem um espaço dentro das aspas.
Hum, entendi, por que o professor nao explica isso? dessa forma
Ele é bobão.
Ele é bobão.
kk
Ta dando Null Pointer nessa comparação porque voce está comparando um uma string nula com uma string vazia primeiro. Quando inverte e dá certo é por que a comparação == null retorna true, e assim ele não faz a proxima comparação pois, voce está usando o operador lógico OU, que ao meu ver está totalmente errado no seu codigo.Inverta as comparações e troce seu OU por um E.
Uma mesma variável do tipo String pode ser null e vazia ao amesmo tempo?
Como você mesmo disse:
Pelo que acontece no seu próprio código já dá pra entender que quando nada é digitado, a string nome recebe valor nulo. Lembre-se: Nulo é diferente de vazio.Edit - Para de colocar sua propria mensagem na tag quote, manolo! O_O
Abraço!
Ta dando Null Pointer nessa comparação porque voce está comparando um uma string nula com uma string vazia primeiro. Quando inverte e dá certo é por que a comparação == null retorna true, e assim ele não faz a proxima comparação pois, voce está usando o operador lógico OU, que ao meu ver está totalmente errado no seu codigo.Inverta as comparações e troce seu OU por um E.
Uma mesma variável do tipo String pode ser null e vazia ao amesmo tempo?
Como você mesmo disse:
Pelo que acontece no seu próprio código já dá pra entender que quando nada é digitado, a string nome recebe valor nulo. Lembre-se: Nulo é diferente de vazio.Edit - Para de colocar sua propria mensagem na tag quote, manolo! O_O
Abraço!
Pense bem no que voce disse.
if(nome.equals("") || nome == null) // por que essa condição gera erro java.lang.NullPoiterException ? invertendo de posicao da certo!
{
confirmCancel();
Vingdel Observou o codigo melhor do que eu.
O E seria o ideal caso vc nao queira que seja nulo ou igual a vazio pra entrar na condição.
Pra o que ele quer, o OU realmente é a solução.
Eu gostaria que você pensasse nisso que você sugeriu a ele:
Pois para a condição ser aceita, a variável nome teria que ser null e vazia, concorda?
Eu gostaria que você pensasse nisso que você sugeriu a ele:Pois para a condição ser aceita, a variável nome teria que ser null e vazia, concorda?
É verdade, concordo, cara.
Mas num caso como:
String string = new Scanner(System.in).nextLine();
if(string != null && !("".equals(string))){
//grava string no banco
}
o E é necessário, o que realmente não é o caso dele.
if(nome.equals("") || nome == null) // por que essa condição gera erro java.lang.NullPoiterException ? invertendo de posicao da certo! { confirmCancel();Vingdel Observou o codigo melhor do que eu.
O E seria o ideal caso vc nao queira que seja nulo ou igual a vazio pra entrar na condição.
Pra o que ele quer, o OU realmente é a solução.
Não, JhowTroMundo, entenda!
O E não seria ideal em situação alguma, ao meu ver, afinal trata-se de comparar uma única variável a condições opostas.
Impossível como:if(num%2==0 && num==1)Entende o que quero dizer?
Abraço!
if(nome.equals("") || nome == null) // por que essa condição gera erro java.lang.NullPoiterException ? invertendo de posicao da certo! { confirmCancel();Vingdel Observou o codigo melhor do que eu.
O E seria o ideal caso vc nao queira que seja nulo ou igual a vazio pra entrar na condição.
Pra o que ele quer, o OU realmente é a solução.
Não, JhowTroMundo, entenda!
O E não seria ideal em situação alguma, ao meu ver, afinal trata-se de comparar uma única variável a condições opostas.
Impossível como:
if(num%2==0 && num==1)Entende o que quero dizer?Abraço!
Uma string não é nula, E essa mesma string não é vazia. Qual a conclusão que vc tira disso?
Eu gostaria que você pensasse nisso que você sugeriu a ele:Pois para a condição ser aceita, a variável nome teria que ser null e vazia, concorda?
É verdade, concordo, cara.
Mas num caso como:
String string = new Scanner(System.in).nextLine(); if(string != null && !("".equals(string))){ //grava string no banco }o E é necessário, o que realmente não é o caso dele.
Show de bola… Chegamos a um entendimento comum…
Abraço, fera!
EDIT:
O E seria o ideal caso vc nao queira que seja nulo ou igual a vazio pra entrar na condição.O E seria o ideal caso vc nao queira que seja nulo NEM igual a vazio pra entrar na condição.
package treinando;
import static javax.swing.JOptionPane.*;
public class Teste {
public static void main(String[] args) {
String nome = "";
while(true){
nome = showInputDialog(null,"Forneça um nome");
if(nome.equals("") || nome == null){
confirmCancel();
showMessageDialog(null,"Voce nao digitou algo ! ","Nenhum Dado Fornecido",INFORMATION_MESSAGE);
continue;
}
showMessageDialog(null,nome);
break;
}
}
public static void confirmCancel(){
int confirm = showConfirmDialog(null,"Dejesa cancelar ? ","Cancelamento",OK_CANCEL_OPTION);
if(confirm == OK_OPTION){
showMessageDialog(null,"Cancelado pelo usuario","Finalizando...",INFORMATION_MESSAGE);
System.exit(0);
}
}
}
ziulluiz, para resolver seu problema faça seu código assim:Blz Vingdel Irei testar aqui. ObrigadoOu já que você sabe que se não digitar nada o método showInputDialog() retorna nada, apenas fechando a caixa, você simplemente pode fazer a condição comparando com null, entretanto já que o while é insistente na entrada de algo a primeira sugestão é a melhor na minha opinião. Veja como fica aí... Abraço!package treinando; import static javax.swing.JOptionPane.*; public class Teste { public static void main(String[] args) { String nome = ""; while(true){ nome = showInputDialog(null,"Forneça um nome"); if(nome.equals("") || nome == null){ confirmCancel(); showMessageDialog(null,"Voce nao digitou algo ! ","Nenhum Dado Fornecido",INFORMATION_MESSAGE); continue; } showMessageDialog(null,nome); break; } } public static void confirmCancel(){ int confirm = showConfirmDialog(null,"Dejesa cancelar ? ","Cancelamento",OK_CANCEL_OPTION); if(confirm == OK_OPTION){ showMessageDialog(null,"Cancelado pelo usuario","Finalizando...",INFORMATION_MESSAGE); System.exit(0); } } }