NullPointerException

Galeraa to com um problema aqui que não consigo resolver, já revirei o código e não encontro… acho que é simples mais ainda nao estou encontrado. O programa roda belezinha faz todos os procedimentos grava o tudo que preciso no banco tudo ok, porém tenho um gravo em um arquivo de log os erros que ele me retorna, no output do netbeans nao retorna nada de erro porem no log sempre me retorna o seguinte:

25/10/2012 17:22.54 ERROR [Timer-2] ImportarRetorno:323 - Exception
java.lang.NullPointerException
at main.dao.exportacao.GenericDao.getStatement(GenericDao.java:49)
at main.dao.importacao.FinanceiroDao.save(FinanceiroDao.java:40)
at main.gerador.ImportarRetorno.gravaFinanceiro(ImportarRetorno.java:289)
at main.gerador.ImportarRetorno.run(ImportarRetorno.java:75)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)

Aonde possivelmente ta acontecendo o NullPointerExecption ja revirei todas essas classes

[quote=Fabio Lacerda]Galeraa to com um problema aqui que não consigo resolver, já revirei o código e não encontro… acho que é simples mais ainda nao estou encontrado. O programa roda belezinha faz todos os procedimentos grava o tudo que preciso no banco tudo ok, porém tenho um gravo em um arquivo de log os erros que ele me retorna, no output do netbeans nao retorna nada de erro porem no log sempre me retorna o seguinte:

25/10/2012 17:22.54 ERROR [Timer-2] ImportarRetorno:323 - Exception
java.lang.NullPointerException
at main.dao.exportacao.GenericDao.getStatement(GenericDao.java:49)
at main.dao.importacao.FinanceiroDao.save(FinanceiroDao.java:40)
at main.gerador.ImportarRetorno.gravaFinanceiro(ImportarRetorno.java:289)
at main.gerador.ImportarRetorno.run(ImportarRetorno.java:75)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)

Aonde possivelmente ta acontecendo o NullPointerExecption ja revirei todas essas classes [/quote]

Não podemos ajuda-lo se você não postar o seu código.

ok, vamos la essa é a GenericDao

/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */
    package main.dao.exportacao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import main.dao.configuracao.ConfiguracaoDao;
import main.model.configuracao.Configuracao;

/**
*

  • @author Rodrigo
    */
    public abstract class GenericDao {

    private Connection cx;

    public boolean testarConexao() throws ClassNotFoundException, SQLException {
    connect();
    return cx != null;

    }

    private void connect() throws ClassNotFoundException, SQLException {
    if (cx == null) {
    Configuracao configuracao = ConfiguracaoDao.read();
    try {
    if (configuracao == null) {
    configuracao = ConfiguracaoDao.read();
    }
    Class.forName(configuracao.getDatabase().getDriverName());
    cx = DriverManager.getConnection(configuracao.getDatabase().getUrl(), configuracao.getDatabase().getUsername(), configuracao.getDatabase().getPassword());
    cx.setAutoCommit(false);
    } catch (SQLException ex) {
    throw ex;
    } catch (ClassNotFoundException ex) {
    throw ex;
    }
    }
    }

    protected PreparedStatement getStatement(String st) throws SQLException, ClassNotFoundException {
    return cx.prepareStatement(st) ;
    }

    public ResultSet executeQuery(String query, Object… params) throws SQLException, ClassNotFoundException {
    PreparedStatement ps = getStatement(query);
    for (int i = 0; i < params.length; i++) {
    ps.setObject(i + 1, params[i]);
    }
    return ps.executeQuery();
    }

    public int getNextSequence(String generator) throws SQLException, ClassNotFoundException {
    ResultSet rs = executeQuery(“select gen_id(” + generator + “, 1) ID from RDB$DATABASE”);
    rs.next();
    return rs.getInt(“ID”);
    }

    public void startTransaction() throws SQLException, ClassNotFoundException {
    connect();
    }

    public void commitTransaction() throws SQLException {
    cx.commit();
    }

    public void rollbackTransaction() throws SQLException {
    cx.rollback();
    }
    }

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */
    package main.dao.importacao;

import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.ParseException;
import main.dao.configuracao.ConfiguracaoDao;
import main.dao.exportacao.GenericDao;
import main.gerador.registros.retorno.LeituraArquivoRetorno;
import main.model.configuracao.Configuracao;
import main.model.importacao.CupomFiscal;
import main.model.importacao.Financeiro;
import org.apache.log4j.Logger;

/**
*

  • @author Rodrigo
    */
    public class FinanceiroDao extends GenericDao {

    private static final String SQL_INS = "insert into ALC_PARCELA "
    + "(PARCELAID, DOCTOID, PARCELA, LOCALIZACAO, GRUPOPORTADOR, "
    + "PORTADOR, VENCIMENTO, VALOR, NUMERO) "
    + “values (?, ?, ?, ?, ?, ?, ?, ?, ?)”;

    private static final String SQLUPDATEDOCTO_STATUS1 = "UPDATE ALC_DOCTO SET STATUS = 1 "
    + “where DOCTOID = ?”;
    private static final String SQLUPDATEDOCTO_STATUS0 = "UPDATE ALC_DOCTO SET STATUS = 0 "
    + “where DOCTOID = ?”;

    public void save(Financeiro financeiro) throws ParseException, SQLException, ClassNotFoundException, Exception {

     if (!financeiro.getCondicaoPagamento().equals("V") && !financeiro.getCancelado().equals("C")){ 
         
         PreparedStatement ps = getStatement(SQL_INS);
    
         financeiro.setParcelaId(getNextSequence("GEN_ALC_PARCELA"));
    
         ps.setInt(1, financeiro.getParcelaId()); // PARCELAID
         ps.setInt(2, financeiro.getCupomFiscal().getCupom_id());      // DOCTOID
         ps.setInt(3, financeiro.getParcela() + 1);  // PARCELA - No kraken a primeira parecela é 1 e não 0
         ps.setString(4, "01");                      // LOCALIZACAO
         ps.setString(5, "LC");                      // GRUPOPORTADOR
         ps.setString(6, "000001");                  // GRUPOPORTADOR
         ps.setDate(7, new java.sql.Date(financeiro.getVencimento().getTime()));  // VENCIMENTO
         ps.setBigDecimal(8, financeiro.getValor());
         if (financeiro.getObservacao().trim().isEmpty()) {
             ps.setString(9, null);
         } else {
             ps.setString(9, financeiro.getObservacao().substring(0, 13));
         }
         ps.executeUpdate();
         ps.close();            
                 
        PreparedStatement psUpdatez = getStatement(SQLUPDATEDOCTO_STATUS0);//colocando 0 no status
        psUpdatez.setInt(1, financeiro.getCupomFiscal().getCupom_id());
        psUpdatez.execute();
        psUpdatez.close();
    
        PreparedStatement psUpdatea = getStatement(SQLUPDATEDOCTO_STATUS1);//colocando 1 no status
        psUpdatea.setInt(1, financeiro.getCupomFiscal().getCupom_id());
        psUpdatea.execute();
        psUpdatea.close();
         
         
             }
             
         }
    

}

[/code]

Essa daqui é uma parte da classe ImportarRetorno peguei so a parte que faz o financeiro pois ela é um pouco grande

[code]private boolean gravaFinanceiro(LeituraArquivoRetorno rcf) {
boolean result = true;
FinanceiroDao dao = new FinanceiroDao();
ParametrosDao paramDao = new ParametrosDao();
try {
paramDao.startTransaction();
Parametros param = paramDao.load();
valorOriginalALC = param.getBloqueioAlmoxarifado();
valorOriginalLIV = param.getBloqueioLivro();
paramDao.mudaBloqueio(“N”, “N”);
paramDao.commitTransaction();

        for (Financeiro mra : rcf.getFinanceiros()) {
            if (mra != null){
                dao.save(mra);
            }
        }
        dao.commitTransaction();
        
        
    } catch (ParseException ex) {
        log.error("ParseException", ex);
        mensagem = ex.getMessage();
        result = false;
        try {
            dao.rollbackTransaction();
        } catch (SQLException ex1) {
            log.error("SQLException", ex1);
        }
    } catch (SQLException ex) {
        log.error("SQLException", ex);
        mensagem = ex.getMessage();
        result = false;
        try {
            dao.rollbackTransaction();
        } catch (SQLException ex1) {
            log.error("SQLException", ex1);
        }
    } catch (ClassNotFoundException ex) {
        log.error("ClassNotFoundException", ex);
        mensagem = ex.getMessage();
        result = false;
        try {
            dao.rollbackTransaction();
        } catch (SQLException ex1) {
            log.error("SQLException", ex1);
        }
    } catch (Exception ex) {
        log.error("Exception", ex);
        mensagem = ex.getMessage();
        result = false;

// if (rcf.getTotalRegistro13()>0){
// try{
// dao.rollbackTransaction();
// } catch (SQLException ex1) {
// log.error(“SQLException”, ex1);
// }
// }
}

    //voltando o status de bloqueio
    try {
        paramDao.mudaBloqueio(valorOriginalALC, valorOriginalLIV);
        paramDao.commitTransaction();
    } catch (SQLException ex) {
         log.error("SQLException", ex);
    } catch (ClassNotFoundException ex) {
        log.error("ClassNotFoundException", ex);
        mensagem = ex.getMessage();
    }
        
    
    return result;

}[/code]

Arrisco dizer que a variável cx está nula. Pode ser que o método connect não tenha sido chamado.

o erro está na linha dao.save(mra); da classe importa retorno, nesse ponto não há transação aberta, faltou um dao.startTransaction(); antes pois o paramDao.commitTransaction(); fechou a transação aberta por paramDao.startTransaction();

O Ataxexe acertou a causa, realmente é porque o cx é nulo, conforme explicação acima.

realmente o problema estava neste ponto muito obrigado Ataxexe e wiltonor me ajudaram muito mesmo :smiley: