Vamos analisar com calma este staktrace:

A main é executada e na linha 21 ela vai para a pilha pois chamou outro
método, o criaAluno, que vai ser executado.

Na linha 23 ele lançou uma NPE.

Uma NPE só pode acontecer por dois motivos.

1. foi lançada com throws, como qualquer exceção (nunca vi isso com uma
NPE).
2. foi lançada pq foi acessada uma referência que não apontava para nenhum
objeto (é pra isso que a NPE serve, é isto que ela significa).

Então, na linha 23, vc acessa alguma referência (chamando um método ou
acessando um atributo) que não foi inicializada, não referencia ninguém,
APONTA para NULL (NULL POINTER exception).

Sua linha 23 é esta: if(alunos.get(dre)== null) alunos.put(dre, new
Aluno(nome, dre));

formatando:

if(alunos.get(dre)== null) {
    alunos.put(dre, new Aluno(nome, dre));
}

desconstruíndo, vc faz 2 chamadas de métodos e uma instanciação. Dentro do
construtor de Aluno foi tudo bem, sem erros, ou ele estaria no stacktrace.
logo, foi em uma das chamadas de método.
Como você faz as duas a partir da mesma referência, só me resta supor que
ela está nula e a que falhou é a primeira (da avaliação do if).
Se você formatar como eu fiz verá que a exceção continua na linha 23.

Formatar desta forma, além de seguir a convenção de codificação Java auxilia
nestes casos (se dentro do if fosse um método de outra referência, você
saberia imediatamente qual estava nula) e ajuda a reconhecer visualmente os
blocos de desvio (é por isto que a convenção recomenda esta forma).

Abraço

Peter P. Lupo
http://craftnicely.blogspot.com - http://sites.google.com/site/pplupo
MPS.BR Authorized Implementation Practitioner - Certified ScrumMaster
Sun Certified Java Associate - Java Black Belt
+55 (021) 81742487


2010/7/5 Romulo Freires <[email protected]>

> Tenho um pequeno no meu programa.
>
> Exception in thread "main" java.lang.NullPointerException
>     at Controle.ControladorAluno.criaAluno(ControladorAluno.java:23)
>     at vista.Main.main(Main.java:21)
>
>
>     public void criaAluno(String nome,String dre)throws
> AlunoExistenteException{
>         if(alunos.get(dre)== null) alunos.put(dre, new Aluno(nome, dre));
> //linha 23
>
>         else throw new AlunoExistenteException("Aluno já existente com
> DRE", dre);
>     }
>
>
>
> Essa parte de baixo é referente a linha 21 de outra parte do código.
>
> try{
>             ca.criaAluno("joão", "1111"); // linha 21
>             System.out.print("Aluno Criado Ok");
>         }
>
>         catch (AlunoExistenteException e){
>             System.out.print(e);
>
>
> Agradeço qualquer ajuda para corrigir o erro.
>
>  --
> You received this message because you are subscribed to the Google Groups
> "Comp 2 - Geral" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected]<comp2-geral%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/comp2-geral?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups "Comp 
2 - Geral" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/comp2-geral?hl=en.

Responder a