[RESOLVIDO]Erro no meu codigo, por que?

21 respostas
Z
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);
            }
           
        }
     
    }

21 Respostas

Andre_Rosa

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.

JhowTroMundo

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.

Z

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

romarcio

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.

Z

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

JhowTroMundo

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

Z

JhowTroMundo:
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 ?

JhowTroMundo

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.

Z

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

JhowTroMundo

Ele é bobão.

Z

Ele é bobão.

kk

Vingdel

JhowTroMundo:
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:

JhowTroMundo:
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!

JhowTroMundo

Vingdel:
JhowTroMundo:
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:

JhowTroMundo:
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.

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

Vingdel

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?

JhowTroMundo

Vingdel:
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.

Vingdel

JhowTroMundo:
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!

JhowTroMundo

Vingdel:
JhowTroMundo:
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?

Vingdel

JhowTroMundo:
Vingdel:
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:

JhowTroMundo:
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.

Vingdel
ziulluiz, para resolver seu problema faça seu código assim:
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);
		}
	}
}
Ou 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!
Z
Vingdel:
ziulluiz, para resolver seu problema faça seu código assim:
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);
		}
	}
}
Ou 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!
Blz Vingdel Irei testar aqui. Obrigado
Criado 28 de maio de 2011
Ultima resposta 29 de mai. de 2011
Respostas 21
Participantes 5