Pessoal,
Isso é meio que sem lógica mas alguem pode me ajudar?
Tenho um código que retorna a variavel com valor ou nula
public long getInicioSub() {
return inicioSub;
}
public void setInicioSub(Long inicioSub) {
if (inicioSub != null ) {
this.inicioSub = inicioSub;
}else {
this.inicioSub = null; //AKI PODERIA ATE SER UM ZERO MAIS ELE TAMBÉM NAO ACEITA QUE FAÇO ISSO: this.inicioSub = 0;
}
}
Ai qndo vou compara-la em um if, ela não acheita que a compare como null somente como zero.
if (sub.getInicioSub() != 0 && sub.getInicioSub() != null){
}
// O ERRO ACONTECE QNDO FAÇO ISSO = sub.getInicioSub() != null
Existem dois tipos diferentes dentro do Java:
a) O tipo primitivo long, com letra minúscula, que representa números. Como não é um objeto, não pode ter valor nulo, ou ser comparado com nulo.
b) O tipo Long (com letra maiúscula), que é uma classe que contém um long dentro. Ela é usada para quando você precisa passar um objeto para uma função (como o caso das listas, por exemplo).
Provavelmente você declarou a variável inicioSub como Long, enquanto seu método getInicioSub() retorna o valor com o tipo primitivo long. Acontece que desde o Java 5, o java é capaz de fazer a conversão automática de um Long para um long, e vice-versa.
Para resolver seu problema, troque a declaração de inicioSub de Long para long, e atribua sempre 0 no lugar de null.
[quote=ViniGodoy]Existem dois tipos diferentes dentro do Java:
a) O tipo primitivo long, com letra minúscula, que representa números. Como não é um objeto, não pode ter valor nulo, ou ser comparado com nulo.
b) O tipo Long (com letra maiúscula), que é uma classe que contém um long dentro. Ela é usada para quando você precisa passar um objeto para uma função (como o caso das listas, por exemplo).
Provavelmente você declarou a variável inicioSub como Long, enquanto seu método getInicioSub() retorna o valor com o tipo primitivo long. Acontece que desde o Java 5, o java é capaz de fazer a conversão automática de um Long para um long, e vice-versa.
Para resolver seu problema, troque a declaração de inicioSub de Long para long, e atribua sempre 0 no lugar de null.[/quote]
Não funcionou continua dando o mesmo erro.
Pode postar o código completo?
CLASSE ContacaoDias
package model;
import java.util.Date;
import java.util.List;
import java.util.ArrayList;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
public class ContacaoDias {
private ConexaoMysql conexaoMysql;
public List<GSDiasSubtracao> Contacao(HttpServletRequest request, String id) {
List<GSDiasSubtracao> subList = new ArrayList<GSDiasSubtracao>();
GSDiasSubtracao sub = new GSDiasSubtracao();
conexaoMysql = new ConexaoMysql();
Statement state = null;
ResultSet rs = null;
//Formata data em formatos do tipo dia(dd), mês(MM), ano(yyyy)
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
try {
state = conexaoMysql.getConnection().createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
rs = state.executeQuery("SELECT * from processos where idProcessos = "+id+"");
while (rs.next()){
String inicio = rs.getString("real_inicioProcesso");
String coleta = rs.getString("real_envioColeta");
String esclarecimento = rs.getString("real_esclarecimento");
String propostas = rs.getString("real_rectoPropostas");
String analise = rs.getString("real_analiseTecnica");
String negociacao = rs.getString("real_negocComercial");
String homologacao = rs.getString("real_homologacao");
String contrato = rs.getString("real_emissaoContrato");
String aprovacao = null;
if (rs.getString("real_inicioProcesso") != null && rs.getString("real_inicioProcesso") != ""){
if (rs.getString("real_aprovGAGG") != null && rs.getString("real_aprovGAGG") != ""){
aprovacao = rs.getString("real_aprovGAGG");
}
if (rs.getString("real_aprovDIPL") != null && rs.getString("real_aprovDIPL") != ""){
aprovacao = rs.getString("real_aprovDIPL");
}
if (rs.getString("real_aprovDEEB") != null && rs.getString("real_aprovDEEB") != ""){
aprovacao = rs.getString("real_aprovDEEB");
}
if (rs.getString("real_aprovUsuario") != null && rs.getString("real_aprovUsuario") != ""){
aprovacao = rs.getString("real_aprovUsuario");
}
if (rs.getString("real_pautaDE") != null && rs.getString("real_pautaDE") != ""){
aprovacao = rs.getString("real_pautaDE");
}
if (rs.getString("real_emitirDDE") != null && rs.getString("real_emitirDDE") != ""){
aprovacao = rs.getString("real_emitirDDE");
}
}
if(inicio != null && inicio != ""){
if (coleta != null && coleta != "") {
//Parse efeuta a validação para saber se uma data é válida com o formato dado
Date ini = sdf.parse(inicio);
Date col = sdf.parse(coleta);
//daysBetween
//Subtrai as datas como números long, para descobrir o intervalo
Long tempoInicio = col.getTime() - ini.getTime();
//Calcula a quantidade de dias.
Long tempoInicioTotal = ((((tempoInicio/1000))/60)/60)/24;
sub.setInicioSub(tempoInicioTotal);
}
if(esclarecimento != null && esclarecimento != ""){
Date escla = sdf.parse(esclarecimento);
Date col2 = sdf.parse(coleta);
Long tempoColeta = escla.getTime() - col2.getTime();
Long tempoColetaTotal = ((((tempoColeta/1000))/60)/60)/24;
sub.setColetaSub(tempoColetaTotal);
}
if(propostas != null && propostas != ""){
Date escla2 = sdf.parse(esclarecimento);
Date prop = sdf.parse(propostas);
Long tempoEsc = prop.getTime() - escla2.getTime();
Long tempoEscTotal = ((((tempoEsc/1000))/60)/60)/24;
sub.setEsclarecimentoSub(tempoEscTotal);
}
if(analise != null && analise != ""){
Date anal = sdf.parse(analise);
Date prop2 = sdf.parse(propostas);
Long tempoProp = anal.getTime() - prop2.getTime();
Long tempoPropTotal = ((((tempoProp/1000))/60)/60)/24;
sub.setRectoPropostasSub(tempoPropTotal);
}
if(negociacao != null && negociacao != ""){
Date anal2 = sdf.parse(analise);
Date negoc = sdf.parse(negociacao);
Long tempoAnal = negoc.getTime() - anal2.getTime();
Long tempoAnalTotal = ((((tempoAnal/1000))/60)/60)/24;
sub.setAnaliseTecnicaSub(tempoAnalTotal);
}
if(homologacao != null && homologacao != ""){
Date hom = sdf.parse(homologacao);
Date negoc2 = sdf.parse(negociacao);
Long tempoNegoc = hom.getTime() - negoc2.getTime();
Long tempoNegocTotal = ((((tempoNegoc/1000))/60)/60)/24;
sub.setNegocComercialSub(tempoNegocTotal);
}
if(aprovacao != null && aprovacao != ""){
Date hom2 = sdf.parse(homologacao);
Date aprov = sdf.parse(aprovacao);
Long tempoHomo = aprov.getTime() - hom2.getTime();
Long tempoHomoTotal = ((((tempoHomo/1000))/60)/60)/24;
sub.setHomologacaoSub(tempoHomoTotal);
}
if(contrato != null && contrato != ""){
Date cont = sdf.parse(contrato);
Date aprov2 = sdf.parse(aprovacao);
Long tempoAprov = cont.getTime() - aprov2.getTime();
Long tempoAprovTotal = ((((tempoAprov/1000))/60)/60)/24;
sub.setAprovacaoSub(tempoAprovTotal);
}
Long soma = null;
if (sub.getInicioSub() != 0 && sub.getInicioSub() != null){
soma = sub.getInicioSub();
if (sub.getColetaSub() != 0 && sub.getColetaSub() != null){
soma += sub.getColetaSub();
}
if (sub.getEsclarecimentoSub() != 0 && sub.getEsclarecimentoSub() != null){
soma += sub.getEsclarecimentoSub();
}
if (sub.getRectoPropostasSub() != 0 && sub.getRectoPropostasSub() != null){
soma += sub.getRectoPropostasSub();
}
if (sub.getAnaliseTecnicaSub() != 0 && sub.getAnaliseTecnicaSub() != null){
soma += sub.getAnaliseTecnicaSub();
}
if (sub.getNegocComercialSub() != 0 && sub.getNegocComercialSub() != null){
soma += sub.getNegocComercialSub();
}
if (sub.getHomologacaoSub() != 0 && sub.getHomologacaoSub() != null){
soma += sub.getHomologacaoSub();
}
if (sub.getAprovacaoSub() != 0 && sub.getAprovacaoSub() != null){
soma += sub.getAprovacaoSub();
}
}
sub.setSomaSub(soma);
} else{
/* inicio = " - "; */
}
}//fim while
}catch(Exception erro){
erro.printStackTrace();
System.out.println("Erro ocorrido na classe ContacaoDias: n" + erro);
return null;
}finally{
if(state != null){ //fechar os statments
try {
state.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
subList.add(sub);
return subList;
}
}
Pode postar o código completo?[/quote]
CLASSE GSDiasSubtracao
package model;
public class GSDiasSubtracao {
private Long inicioSub;
private Long coletaSub;
private Long esclarecimentoSub;
private Long rectoPropostasSub;
private Long analiseTecnicaSub;
private Long negocComercialSub;
private Long homologacaoSub;
private Long aprovacaoSub;
private Long emissaoContratoSub;
private Long somaSub;
public Long getSomaSub() {
return somaSub;
}
public void setSomaSub(Long somaSub) {
this.somaSub = somaSub;
}
public Long getColetaSub() {
return coletaSub;
}
public void setColetaSub(Long coletaSub) {
this.coletaSub = coletaSub;
}
public Long getInicioSub() {
return inicioSub;
}
public void setInicioSub(Long inicioSub) {
if (inicioSub != null ) {
this.inicioSub = inicioSub;
}else {
this.inicioSub = null;
}
}
public Long getEsclarecimentoSub() {
return esclarecimentoSub;
}
public void setEsclarecimentoSub(Long esclarecimentoSub) {
this.esclarecimentoSub = esclarecimentoSub;
}
public Long getRectoPropostasSub() {
return rectoPropostasSub;
}
public void setRectoPropostasSub(Long rectoPropostasSub) {
this.rectoPropostasSub = rectoPropostasSub;
}
public Long getAnaliseTecnicaSub() {
return analiseTecnicaSub;
}
public void setAnaliseTecnicaSub(Long analiseTecnicaSub) {
this.analiseTecnicaSub = analiseTecnicaSub;
}
public Long getNegocComercialSub() {
return negocComercialSub;
}
public void setNegocComercialSub(Long negocComercialSub) {
this.negocComercialSub = negocComercialSub;
}
public Long getHomologacaoSub() {
return homologacaoSub;
}
public void setHomologacaoSub(Long homologacaoSub) {
this.homologacaoSub = homologacaoSub;
}
public Long getAprovacaoSub() {
return aprovacaoSub;
}
public void setAprovacaoSub(Long aprovacaoSub) {
this.aprovacaoSub = aprovacaoSub;
}
public Long getEmissaoContratoSub() {
return emissaoContratoSub;
}
public void setEmissaoContratoSub(Long emissaoContratoSub) {
this.emissaoContratoSub = emissaoContratoSub;
}
}
O ERRO:
16/11/2009 09:22:38 org.apache.catalina.core.ApplicationDispatcher invoke
SEVERE: Servlet.service() for servlet jsp threw exception
java.lang.NullPointerException
at org.apache.jsp.DHTMLXSuite.dhtmlxWindows.samples._01_005finit._08_005fattach_005fobject_005fadjust_jsp._jspService(_08_005fattach_005fobject_005fadjust_jsp.java:217)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:679)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:461)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:399)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
at control.Detalhes.doGet(Detalhes.java:45)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:627)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:837)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:640)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1286)
at java.lang.Thread.run(Thread.java:619)
16/11/2009 09:22:38 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet Detalhes threw exception
java.lang.NullPointerException
at org.apache.jsp.DHTMLXSuite.dhtmlxWindows.samples._01_005finit._08_005fattach_005fobject_005fadjust_jsp._jspService(_08_005fattach_005fobject_005fadjust_jsp.java:217)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:679)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:461)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:399)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
at control.Detalhes.doGet(Detalhes.java:45)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:627)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:837)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:640)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1286)
at java.lang.Thread.run(Thread.java:619)
O problema é que o valor da variável inicioSub é nulo. Então, o primeiro teste inicioSub != 0 vai tentar converter a variável para um número, e isso gera uma NullPointerException. Para corrigir, inverta o teste:
sub.getInicioSub() != null && sub.getInicioSub() != 0