Javalangnullpointerexception - Não consigo resolver

Boa tarde, sou iniciante em desenvolvimento web com java e me deparei com um problema que não sei a solução, andei procurando na internet e mesmo assim não consegui resolver, a situação é a seguinte tem um arquivo chamado novoContato.jsp que possui um formulário básico de cadastro com dois campos nome e celular, na
hora que clico em gravar ele aciona esse servlet abaixo, não dá nenhum erro pois a classe DAO e as conexões estão perfeita, mas não grava nada no banco de dados mysql que estou usando, a unica mensagem que dá é javalangnullpointerexception que vi na saída do Apache Tomcat que é o servidor que uso.

Andei pesquisando pelo para saber um pouco mais sobre a mensagem e descobri que é quando alguma variavel é nula, mais não sei resolver o problema que está nas variaveis que estou recebendo do formulário nome e celular, no netbeans ele diz assim : “A variavel nome não é usada” dai acho que a causa de não estar efetuando o cadastro no banco é essa…

Ajudem ai galera,
Atte, Leonardo Borges…

[code]package action;

import dao.FabricaConexao;
import dao.JDBCContatoDAO;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import javax.s ervlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import model.Contato;

public class InserirContato extends HttpServlet {

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    try {
        /* TODO output your page here
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet InserirContato</title>");  
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Servlet InserirContato at " + request.getContextPath () + "</h1>");
        out.println("</body>");
        out.println("</html>");
         */
    } finally {
        out.close();
    }
}

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    processRequest(request, response);
}

//Handles the HTTP <code>POST</code> method.
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    processRequest(request, response);
   
    String nome = request.getParameter("nome"); // diz que a variavel nome não é usada
     String celular = request.getParameter("celular"); // diz que a variavel celular não é usada


    Contato novoContato = new Contato(); // Instancia um objeto novoContato da classe Contato.java

     novoContato.setNome(nome);
     novoContato.setCelular(celular);
   
    // usando minha fabrica de conexão
    FabricaConexao fabrica = new FabricaConexao();
    Connection conexao = fabrica.FazConexao();
    JDBCContatoDAO dao = new JDBCContatoDAO(conexao);

    dao.Inserir(novoContato);
}

/** 
 * Returns a short description of the servlet.
 * @return a String containing servlet description
 */
@Override
public String getServletInfo() {
    return "Short description";
}// </editor-fold>

}
[/code]

Posta o stackTrace ou o trecho do log do apache em que o erro é indicado

drsmachado nem sei explicar agora, mas limpei o log do servidor apache e executei denovo e desapareceu o erro, acredito que foi quando meu professor mandou deixar uma classe publica agora a pouco pelo messenger, agora o servidor não está mostrando nenhum log de erro, tá funcionando perfeitamente…

Essa classe abaixo é a que faz a gravação no banco…

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import model.Contato;

public class JDBCContatoDAO implements ContatoDAO {

    Connection conexao;

    public JDBCContatoDAO(Connection conexao) {
        this.conexao = conexao;
    }

    @Override
    public void Inserir(Contato contato) {
        String comando = "insert into contato (nome,celular)"+" values (?,?);";
       // String comando = "insert into contato (codigo,nome,celular)" + "values (?,?,?)";
//String seleciona = "selec * from contato";
        PreparedStatement p;

        try {
            p = this.conexao.prepareStatement(comando);
        //    p.setInt(1, contato.getCodigo());
            p.setString(1, contato.getNome());
            p.setString(2, contato.getCelular());

        } catch (SQLException ex) {
            Logger.getLogger(JDBCContatoDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @Override
    public List<Contato> ListarTodos() {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}

Se você tinha um erro, é uma péssima idéia limpar os logs sem entender perfeitamente porque ocorreu. Não é porque agora você não é capaz de simulá-lo que ele não está lá. Os programas tem a mania chata de não se corrigir sozinhos. Na verdade, esperar que isso ocorra é uma POG.

O maior problema é que isso pode só se reproduzir novamente na frente do seu cliente (ou, se for um trabalho de faculdade, seu professor).

Consegui simular o erro novamente, nunca mais apago o log do servidor :smiley:

06/10/2011 20:13:30 org.apache.catalina.core.StandardContext reload INFO: Reloading Context with name [/Agenda] has started 06/10/2011 20:13:33 org.apache.catalina.core.StandardContext reload INFO: Reloading Context with name [/Agenda] is completed 06/10/2011 20:13:34 org.apache.catalina.loader.WebappClassLoader loadClass INFO: Illegal access: this web application instance has been stopped already. Could not load com.mysql.jdbc.SQLError. The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact. java.lang.IllegalStateException at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1562) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521) at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3348) at com.mysql.jdbc.MysqlIO.quit(MysqlIO.java:1692) at com.mysql.jdbc.ConnectionImpl.realClose(ConnectionImpl.java:4388) at com.mysql.jdbc.ConnectionImpl.cleanup(ConnectionImpl.java:1368) at com.mysql.jdbc.ConnectionImpl.finalize(ConnectionImpl.java:2737) at java.lang.ref.Finalizer.invokeFinalizeMethod(Native Method) at java.lang.ref.Finalizer.runFinalizer(Finalizer.java:83) at java.lang.ref.Finalizer.access$100(Finalizer.java:14) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:160) 06/10/2011 20:13:34 org.apache.catalina.loader.WebappClassLoader loadClass INFO: Illegal access: this web application instance has been stopped already. Could not load com.mysql.jdbc.ProfilerEventHandlerFactory. The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact. java.lang.IllegalStateException at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1562) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521) at com.mysql.jdbc.ConnectionImpl.realClose(ConnectionImpl.java:4412) at com.mysql.jdbc.ConnectionImpl.cleanup(ConnectionImpl.java:1368) at com.mysql.jdbc.ConnectionImpl.finalize(ConnectionImpl.java:2737) at java.lang.ref.Finalizer.invokeFinalizeMethod(Native Method) at java.lang.ref.Finalizer.runFinalizer(Finalizer.java:83) at java.lang.ref.Finalizer.access$100(Finalizer.java:14) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:160) 06/10/2011 20:13:34 org.apache.catalina.loader.WebappClassLoader loadClass INFO: Illegal access: this web application instance has been stopped already. Could not load com.mysql.jdbc.SQLError. The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact. java.lang.IllegalStateException at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1562) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521) at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3348) at com.mysql.jdbc.MysqlIO.quit(MysqlIO.java:1692) at com.mysql.jdbc.ConnectionImpl.realClose(ConnectionImpl.java:4388) at com.mysql.jdbc.ConnectionImpl.cleanup(ConnectionImpl.java:1368) at com.mysql.jdbc.ConnectionImpl.finalize(ConnectionImpl.java:2737) at java.lang.ref.Finalizer.invokeFinalizeMethod(Native Method) at java.lang.ref.Finalizer.runFinalizer(Finalizer.java:83) at java.lang.ref.Finalizer.access$100(Finalizer.java:14) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:160) 06/10/2011 20:13:34 org.apache.catalina.loader.WebappClassLoader loadClass INFO: Illegal access: this web application instance has been stopped already. Could not load com.mysql.jdbc.ProfilerEventHandlerFactory. The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact. java.lang.IllegalStateException at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1562) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521) at com.mysql.jdbc.ConnectionImpl.realClose(ConnectionImpl.java:4412) at com.mysql.jdbc.ConnectionImpl.cleanup(ConnectionImpl.java:1368) at com.mysql.jdbc.ConnectionImpl.finalize(ConnectionImpl.java:2737) at java.lang.ref.Finalizer.invokeFinalizeMethod(Native Method) at java.lang.ref.Finalizer.runFinalizer(Finalizer.java:83) at java.lang.ref.Finalizer.access$100(Finalizer.java:14) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:160)

Menos mal, pelo menos o próprio erro já diz que foi disparado só para fins de debug e não tem impacto funcional. :slight_smile:

Quer dizer que não tem nenhum erro ?

Quer dizer que não tem nenhum erro ?[/quote]

O log está explicando que não pode criar o SQLError pois a aplicação já havia sido finalizada pelo servidor. Com a aplicação finalizada, isso gera um problema de estado inválido e a ferramenta de log anota esse fato.

Logs do tipo INFO geralmente são apenas warnings, não erros de verdade. É bom pelo menos dar uma lida neles e até pesquisar se tem alguma forma de evita-los, mas nem sempre é realmente necessário resolve-los.