Erro: iReport + Netbeans

15 respostas
Dassayev

Boa tarde!

Estou com problemas para gerar um relatório. Quando executo o relatório um erro é gerado.

Método que chama o relatório:
try {
                    Connection con = HibernateUtility.getSession().connection();

                    String sql = "SELECT "
                            + "pagamentos.numero_cheque AS pagamentos_numero_cheque, "
                            + "pagamentos.data_pagamento AS pagamentos_data_pagamento, "
                            + "pagamentos.valor AS pagamentos_valor, "
                            + "pagamentos.valor_desconto AS pagamentos_valor_desconto, "
                            + "pagamentos.valor_juros AS pagamentos_valor_juros, "
                            + "extratos.data AS extratos_data, "
                            + "extratos.valor AS extratos_valor, "
                            + "extratos.tipo_operacao AS extratos_tipo_operacao, "
                            + "fornecedores.nome AS fornecedores_nome, "
                            + "bancos.nome AS bancos_nome, "
                            + "extratos.historico AS extratos_historico, "
                            + "contas.descricao AS contas_descricao, "
                            + "contas.agencia AS contas_agencia, "
                            + "contas.digito_agencia AS contas_digito_agencia, "
                            + "contas.digito_conta AS contas_digito_conta "
                            + "FROM "
                            + "carajas.fornecedores fornecedores INNER JOIN carajas.pagamentos pagamentos ON fornecedores.id = pagamentos.id_fornecedor "
                            + "INNER JOIN carajas.extratos extratos ON pagamentos.id_extrato = extratos.id "
                            + "INNER JOIN carajas.contas contas ON pagamentos.id_conta = contas.id "
                            + "AND contas.id = extratos.id_conta "
                            + "INNER JOIN carajas.bancos bancos ON contas.id_banco = bancos.id "
                            + "WHERE "
                            + "pagamentos.data_pagamento between '" + Functions.formatDate(dpDataIni.getDate(), "yyyy/MM/dd")
                            + "' and '" + Functions.formatDate(dpDataFim.getDate(), "yyyy/MM/dd") + "' "
                            + "and pagamentos.id_conta = " + recuperaConta().getId() + " "
                            + "and pagamentos.conciliado = true";

                    PreparedStatement ps = con.prepareStatement(sql);
                    ResultSet rs = ps.executeQuery();
                    con.close();
                    HashMap params = new HashMap();
                    JRResultSetDataSource ds = new JRResultSetDataSource(rs);

                    JasperPrint impressao = JasperFillManager.fillReport("D:/pagamentos_conciliados.jasper", new HashMap(), ds);
                    JasperViewer.viewReport(impressao, false);
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
Erro gerado:
java.lang.NullPointerException
        at net.sf.jasperreports.engine.JRPropertiesMap.readObject(JRPropertiesMap.java:176)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
        at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1667)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1323)
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
        at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:88)
        at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:515)
        at br.com.audcont.conversor.apresentacao.DialogRelatorio$6.doInBackground(DialogRelatorio.java:266)
        at javax.swing.SwingWorker$1.call(SwingWorker.java:278)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
        at javax.swing.SwingWorker.run(SwingWorker.java:317)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:619)

Quem puder me ajudar eu agradeço muito!!! Já estou aperriado com esse erro!

15 Respostas

fabricioempresa

Penso eu que ele não está recebendo os parametros.

Dassayev

Mas no relatório não tem nenhum parâmetro não.

Fernando_Generoso_da

cola o Stactrace completo…só por aí, não dah pra saber…

Fernando_Generoso_da

Troca esse trecho:

HashMap params = new HashMap();  
 JRResultSetDataSource ds = new JRResultSetDataSource(rs);  
   
 JasperPrint impressao = JasperFillManager.fillReport("D:/pagamentos_conciliados.jasper", new HashMap(), ds);  
 JasperViewer.viewReport(impressao, false);

por esse:

HashMap params = new HashMap();  
 JRResultSetDataSource ds = new JRResultSetDataSource(rs);  
 InputStream is = new FileInputStream(new File("D://pagamentos_conciliados.jasper"));
 if(is != null && ds != null){
 JasperPrint impressao = JasperFillManager.fillReport(is, params, ds);  
 JasperViewer.viewReport(impressao, false);  
}else{
   System.out.println("Alguma coisa não cheira bem aqui...tem coisa null!!");
}

e ve o que acontece…

Fernando

Dassayev

Fiz o solicitado! Não tem nada null, a função entra no IF e o erro acontece no seguinte código:

JasperPrint impressao = JasperFillManager.fillReport(is, params, ds);

O erro gerado foi:

java.lang.NullPointerException at net.sf.jasperreports.engine.JRPropertiesMap.readObject(JRPropertiesMap.java:176) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1667) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1323) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:192) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:580) at br.com.audcont.conversor.apresentacao.DialogRelatorio$6.doInBackground(DialogRelatorio.java:271) at javax.swing.SwingWorker$1.call(SwingWorker.java:278) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at javax.swing.SwingWorker.run(SwingWorker.java:317) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:619)

Fernando_Generoso_da

Teria algum problema de tu enviar o teu .jrxml?? ou cola o conteúdo dele aqui pra gente dar uma olhada…

Fernando

Dassayev

Posso sim. Segue em anexo o arquivo jrxml.

Fernando_Generoso_da

cara,

O único erro que vi é q no teu relatório, em fields, tu definiu teus campos data como java.sql.Date, e no relatório mesmo na expressão F{} nesses mesmos atributos, tu definiu como java.util.Date. Eu testei aqui e acusou outros erros por causa disso…modifica aí e ve se dah certo…

Fernando

Dassayev

Cara não consegui modificar isso que você falou, mas eu removi esses campos de data e o mesmo erro foi gerado.
Já estou doido aqui cara. Já fiz de tudo!

Fernando_Generoso_da

cara…outra coisa q eu vi…

tem uma opção que tu marca, Blank when null…e essa opção não está marcada nos campos… marca todos os fields com essa opção…o q pode estar acontecendo é q algum campo tah vindo nulo…e estourando essa exceção…

tenta aí e depois posta o resultado…

Fernando

Fernando_Generoso_da

Cara,

Dá uma olhada nesse trecho de código e faz o mesmo no teu código. Eu acho que o problema está na versão do jasper q tu está compilando o teu relatório e na versao que tu tah tentando rodar…provavelmente as duas são diferentes…

InputStream is = this.getClass().getResourceAsStream("/relatorios/pagamentos_conciliados.jrxml");
		
		Map params = new HashMap();

		JasperPrint js = null;
		try {
			JasperReport jr = JasperCompileManager.compileReport(is);
			js = JasperFillManager.fillReport(jr, params, ds);
		} catch (JRException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
Dassayev

Realmente a versão estava errada. Eu estou usando o iReport 3.7.4 e estava usando a lib da versão 2.0.2. Ajustei isso e o erro sumiu. Mas o relatório não esta abrindo. Isso tá muito estranho. Ele da pau na nessa linha:

JasperPrint impressao = JasperFillManager.fillReport(is, params, ds);

Não gera erro e o código para ai.

Fernando_Generoso_da

tu tah debuggando o código?? muito estranho não gerar erro…

Dassayev

Estou debugando sim. Ele entra em uma classe chamada FutureTask.java e entra no catch da função a baixo:

void innerRun() { if (!compareAndSetState(0, RUNNING)) return; try { runner = Thread.currentThread(); if (getState() == RUNNING) // recheck after setting thread innerSet(callable.call()); else releaseShared(0); // cancel } catch (Throwable ex) { innerSetException(ex); } }

Essa classe eu não posso modificar ( já tentei colocar o ex.printStrackTrace ).

Dassayev

Alguém pode ajudar!!!

Criado 23 de julho de 2010
Ultima resposta 28 de jul. de 2010
Respostas 15
Participantes 3