Problemas com NullPointerException

8 respostas
M

Fala ai galera,
Bom estou praticando java desenvolvendo um jogo de poker...
e estou tendo problemas em criar o metodo que faz a verificacao ao clicar em jogar de se ja existem jogadores cadastrados ( SE JA FORAM ADICIONADOS OS NOMES E VALORES EM DINHEIRO ).
Mas ao criar o metodo estou tendo erro no NullPointerException.

segue o codigo:

public void VerificarJogar(){
        
       for(int i=0; i<4; i++){
       
           if(NomePlayers[i].equals("")){
               
               //IMPRIME NA TELA QUE FALTA CADASTRAR JOGADORES
               ContatoUsuario.setText("VOCE PRECISA CADASTRAR OS NOMES DE DOIS JOGADORES OU MAIS");
               
           }else{
              
               //VERIFICA SE EXISTE MAIS DE 2 JOGADORES CADASTRADOS
               if(NumeroJogadores >= 2){
               
               //CRIA UM CONSTRUTOR E TORNA VISIVEL O FRAME JOGANDO 
               FrameJogando frame = new FrameJogando(); 
               frame.setVisible(true);
               
               }
               
               //INCREMENTA A VARIAVEL PARA MOSTRAR QUANTIDADE DE JOGADORES CADASTRADOS
               NumeroJogadores++;
               
           }
           
         }
        
    }

OBS:.

o vetor NomePlayers[] e onde armazeno os nomes dos jogadores e uma variavel de outra classe.

o JtextField ContatoUsuario esta em um frame de entrada e o lugar onde aparece as mensagens de erro para o usuario.

NumerodeJogadores e onde eu armazeno a quantidade de jogadores cadastrados para saber se ja tem pelo menos 2 (minimo para jogar poker).

ALGUEM PODE ME AJUDAR? :S
tenho quase certeza como o erro esta quando eu verifico se a string do vetor esta vazia ... mas nao consigo concertar :S

8 Respostas

M

ja tentei usar o codigo:

if( !"".equals(NomePlayers[i])) {

}

mas ai da o erro:

ArrayIndexOutOfBoundsException: 3

BrunoFurtado

Cara, em qual linha ocorre o erro?
O vetor “NomePlayers” foi inicializado?

L

Porque aquele i<4? procure usar tipo, seuvetor.lenght.

Onde você inicializou o seu vetor, qual o tamanho alocado para ele.
Ali em seu código você alocou 4 “celulas”, lembrando que acontagem em java, e como no C, começa no zero

M

lpbianco foi exatamente oque voce falou... na verdade os dois me ajudaram eu estive pesquisando e mechendo aqui o resultado foi o seguinte:

o for eu nao pude usar daquele jeito... nao sei porque mas dava erro de nullpointer e continuo sem saber porque quando coloquei desta forma:

if( "".equals(NomePlayers[i])) { 

}

funcionou... alguem pode me dizer?

______________________________________________________________________________________________________________________

em seguida o erro que deu foi porque eu coloquei o for de 4 loops e o vetor de somente 3 isso foi burrada da minha parte! =D

L

O java não entende que definindo um numero apenas como limite seja uma forma segura de se fazer isto, ao menos que você informe para ele que sabe o que está fazendo

W

Recomendo a leitura do Java Code Conventions para facilitar a leitura do seu código:

http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-135099.html#367

Att

W

Para você entender, ocorreu o seguinte:

NomePlayers[i].equals("")

Quando você fez isso ai, você tentou acessar um objeto no índice “i” de seu vetor “NomePlayers”, mas o objeto está nulo. Como é nulo, não tem como você operar a função “equals” e por isso a Java Virtual Machine lançou um erro de execução NullPointerException (NPE).

Agora…

"".equals(NomePlayers[i])

Isso significa que você criou um objeto constate VAZIO “” que existe porque não é nulo, simplismente existe com tamanho 0. Você já sabe então que a função “equals” fica acessível neste caso. Equals ainda não exige que o valor a comparar “NomePlayers[i]” exista, pois ele sabe tratar.

Moral da história, você deve pensar que VAZIO é o mesmo que NULO em Java, mas não é assim. Nulo significa ausência de objeto, VAZIO é um objeto String de tamanho ZERO, porém existe o objeto.

Fiz uma função para evitar erros de NPE justamente para casos de uso como foi o seu. O artigo está em: http://oracle2java.blogspot.com/2012/11/java-evitar-nullpointerexception.html

wiliamps

M

Muiiiitooo obrigado williamps otimo explicacao! vlw mesmo!

Criado 27 de novembro de 2012
Ultima resposta 28 de nov. de 2012
Respostas 8
Participantes 5