Erro: iReport + Netbeans

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:

[code]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();
            }[/code]

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!

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

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

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

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

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)

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

Fernando

Posso sim. Segue em anexo o arquivo jrxml.

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

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!

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

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();
		}

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.

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

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 ).

Alguém pode ajudar!!!