NullPointerException?

Colegas,

Estou recebendo de minha página jsp valores em um array de strings dessa forma:

String[] confirmados = request.getParameterValues("libera");

Tenho duas dúvidas: Como faço pra checar se o array está NULO ? Estou fazendo assim:

if(confirmados.equals(null))
    {
      System.out.println("ARRAY VAZIO");
    }

Porque ele me gera este erro ??

java.lang.NullPointerException
at equipamentos.Confirmado.doPost(Confirmado.java:42)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)

Ajudem-me please !

Para verifica se eh null ou nao, faca assim:

if (confirmados == null)
    // eh nulo
else
    // nao eh nulo

[]'s
Rafael Steil

Apenas complementando sua dúvida Cyber.

O método NullPointerException acontece quando você tenta invocar algum método ou acessar algum atributo de uma variável que não referencia nenhum objeto! (ponteiro nulo)

No seu caso, como a variável “confirmados” recebia um valor null e então o seguinte código era chamado:

 confirmados.equals(null) 

é como se você chamasse:

 null.equals(null) 

ou seja, algo totalmente inválido, pois null é uma palavra chave que não aponta para nenhum objeto, não fazendo sentido portanto chamar o método equals(), o que ocasionou a exceção.

A maneira correta de fazer esta verificação é a maneira que foi sugerida pelo colega Rafael.
Espero ter ajudado,

Abraços!!

Uma outra coisa que reparei quando tava mexendo com Servlets ( nao sei se se aplica a JSP, pois nao mexo com ele ) sao as verificacoes para ver se o campo do formulario/url veio com algum valor. Pelo que notei, se algum campo esta no <form> ou eh passado pela URL, porem nenhum valor eh informado, ele vem com o valor “” e nao null. A verificacao somente vai retornar null se o campo nao existir, ou seja, voce tentar verificar uma variavel que realmente nao existe. Por exemplo, considerando a seguinte url:

no Servlet acontece isso:

...
if &#40;request.getParameter&#40;&quot;nome&quot;&#41; == null&#41;
    // NAO vai entrar aqui, pq na verdade 'nome' eh &quot;meuNome&quot;

if &#40;request.getParameter&#40;&quot;cidade&quot;&#41; == null&#41;
    // NAO vai entrar aqui, pq cidade eh &quot;&quot;

if &#40;request.getParameter&#40;&quot;idade&quot;&#41; == null&#41;
    // VAI entrar aqui, pq idade nao foi especificado na URL

e assim por diante. Portanto, teoricamente sempre deveria usar

..
if &#40;request.getParameter&#40;&quot;meuCampo&quot;&#41; != null &amp;&amp;         !request.getParameter&#40;&quot;meuCampo&quot;&#41;.equals&#40;&quot;&quot;&#41;&#41;
    // ok, a variavel contem de fato algum valor.

Alguem confirma isso? eu poderia ler a especificacao pra descobrir, de qq maneira, mas creio que alguem ja tenha essa resposta… :slight_smile:

[]'s
Rafael Steil

Seu raciocínio está correto Rafael, se um parametro não existe o método getParameter() realmente retorna nulo. E caso exista, retorna uma String com seu valor (que é “” caso não haja valor especificado como no exemplo que você deu).

Quanto ao teste que você sugeriu:

..
if &#40;request.getParameter&#40;&quot;meuCampo&quot;&#41; != null &amp;&amp;         !request.getParameter&#40;&quot;meuCampo&quot;&#41;.equals&#40;&quot;&quot;&#41;&#41;
    // ok, a variavel contem de fato algum valor. 

Ele só seria válido se o campo não aceitasse valores nulos, mas lembre-se que pode haver campos de preenchimento opcional, que podem retornar valores vazios (""), neste caso, bastaria apenas testar para verificar se o parametro não é nulo.

Espero ter contribuido.

Abraços!