[resolvido] java.lang.NullPointerException

4 respostas
andreacerqueira
não consigo achar o erro, ele acontece quando tento alterar alguma tarefa.
INFO: Conectannnnndo ao banco!
INFO: 1
INFO: Primeira Tarefa!!!
INFO: false
WARNING: StandardWrapperValve[springmvc]: PWC1406: Servlet.service() for servlet springmvc threw exception
java.lang.NullPointerException
	at br.com.caelum.tarefas.dao.TarefaDAO.altera(TarefaDAO.java:125)
	at br.com.caelum.tarefas.controller.TarefasController.altera(TarefasController.java:46)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213)
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126)
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:755)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1534)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:326)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:227)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:170)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
	at java.lang.Thread.run(Thread.java:722)
o jsp de alteração é esse:
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib tagdir="/WEB-INF/tags" prefix="listagem" %>

<c:import url="../header.jsp" />
	
	<c:forEach var="tarefa" items="${tarefas}">
	
		<h1>Alterar Tarefa - ${tarefa.id}</h1>
		
		<form action="alteraTarefa" method="post" varStatus="id">
		    <p class="form1">
		        <label>Descrição:</label>
		        <textarea name="descricao" class="textarea">${tarefa.descricao}</textarea>
		    </p>
		    <p class="form1">
		        <label>Finalizado?</label>
		        <input type="checkbox" name="finalizado" value="true" ${tarefa.finalizado ? 'checked' : ''} />
		    </p>
		    <p class="form1">
		        <label>Data de Finalização:</label>
		        <fmt:formatDate value="${tarefa.dataFinalizacao.time}" pattern="dd/MM/yyyy" />
	        	<listagem:campoData id="dataFinalizacao" />
		    </p>
		    <p class="form1-but">
		    	<input type="hidden" name="id" value="${tarefa.id}" />
		        <input type="submit" value="Alterar" class="but" />
		    </p>
		</form>
		
	</c:forEach>
	
	<br clear="all" />

<c:import url="../footer.jsp" />
quando clico em alterar ele chama o controller:
@RequestMapping("alteraTarefa")
	public String altera(@Valid Tarefa tarefa, BindingResult result) {
		
		if (result.hasErrors()) { // erro no formulario inteiro
			return "tarefa/formulario";
		}
		
		TarefaDAO dao = new TarefaDAO();
		dao.altera(tarefa);
		return "index";
	}
que chama o DAO:
public void altera(Tarefa tarefa) {
    	System.out.println(tarefa.getId());
    	System.out.println(tarefa.getDescricao());
    	System.out.println(tarefa.isFinalizado());
    	System.out.println(tarefa.getDataFinalizacao().getTimeInMillis());
		
        try {
            String sql = "UPDATE tarefas SET descricao=?, finalizado=?, dataFinalizacao=? WHERE id=?";
            PreparedStatement stmt = connection.prepareStatement(sql);
            stmt.setString(1, tarefa.getDescricao());
            stmt.setBoolean(2, tarefa.isFinalizado());
            if(tarefa.getDataFinalizacao() != null) {
            	stmt.setDate(3, new Date(tarefa.getDataFinalizacao().getTimeInMillis()));
            } else {
            	stmt.setDate(3, null);
            }
            stmt.setLong(4, tarefa.getId());
            stmt.execute();
            stmt.close();
            System.out.println("DADOS ALTERADOS COM SUCESSO!");
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

o println mostra que os valores estão sendo passados.

alguém pode me ajudar a encontrar o problema?

obrigado.

4 Respostas

Rodrigo_Sasaki

java.lang.NullPointerException at br.com.caelum.tarefas.dao.TarefaDAO.altera(TarefaDAO.java:125) at br.com.caelum.tarefas.controller.TarefasController.altera(TarefasController.java:46)

O que acontece nas linhas especificadas dentro dos parenteses?

andreacerqueira

cara que loucura, voltou a funcionar.
acho que eram resgistros que não tinham todos os campos preenchidos.
putz :slight_smile:
só não vou fechar o topico agora pq não tenho certeza.
mas logo logo eu fecho se estiver tudo certo.
muito obrigado pela resposta digão.

pmlm

Se a dataFinalicacao é null, isto vai dar NullPointerException:

System.out.println(tarefa.getDataFinalizacao().getTimeInMillis());
andreacerqueira

sim pmlm foi isso mesmo :slight_smile:

Criado 5 de maio de 2012
Ultima resposta 5 de mai. de 2012
Respostas 4
Participantes 3