NullPointerException / IReport

5 respostas
R

Olá pessoal,
Nao estou conseguindo resolver este problema do Ireport com Java. Se alguem souber de alguma dica, fico grato pela ajuda.
Segue abaixo a listagem dos meus fontes para alguem se basear.
O relatorio é simples, lista codigo, nome, lacre e numero de pacotes das agencias. Os meus dados devem ser enviados sem
utilizacao de SQL, pois estao em outro tipo de arquivo. Deve-se utilizar JRDataSource.
Preciso tambem esclarecer melhor a fonte de dados do Ireport (esta meio obscuro!).

Antes da emissao do relatorio
Passou dentro do criacaoDosDados


Exception in thread main java.lang.NullPointerException

at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:89)

at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:601)

at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:517)

at teste.GerarRelatorio.gerarRelatorio(GerarRelatorio.java:17)

at teste.GerarRelatorio.main(GerarRelatorio.java:25)

Java Result: 1

CONSTRUÍDO COM SUCESSO (tempo total: 1 segundo)

= = = = = = = = = = = = = = = = = = = = = = =

Abaixo segue a listagem das minhas classes necessarias para a geracao do relatorio.
                  • INTERFACE     JRDataSource   * * * * * * * * * *
                    

import net.sf.jasperreports.engine.JRField;

public interface JRDataSource {

public Object getFieldValue(JRField jrFields);

public boolean next();

}
                  • Classe Agencia   * * * * * * * * * *
                    

public class Agencia implements Comparable {

private String cage;

private String nome;

private String paco;

private String lacr;

private int numero;
private static boolean ordena;

public Agencia() {

//

}

public Agencia(String cage, String nome, String lacr, String paco) {

this.cage = cage;

this.nome = nome;

this.lacr = lacr;

this.paco = paco;

}

@Override

public int compareTo(Agencia outra) {

if (ordena == true) { return (getNome().compareTo(outra.getNome())); }

else return 0;

//else return (getCage.compareTo(outra.getCage()));

}
private String inteiroParaString(int kl) {

String texto = Integer.toString(numero);

kl     = kl - texto.length();

while (kl > 0) {

texto   = 0 + texto;

kl;

}

return ( texto );

}
public void alteraOrdenacao() {

ordena = (! ordena);

}

//====--  –  –  –  –  –  –  –  –  –  –  –  –  –  --====

//====--   Testa o conteudo antes da conversao para inteiro   --====

//====--  –  –  –  –  –  –  –  –  –  –  –  –  –  --====

private int setaInteiro(String white) {

if (white.equals("")) return 0;

else return Integer.parseInt(white);

}

public String getCage() { return cage; }
public void setCage(String cage) { this.cage = cage; }

public String getNome() { return nome; }
public void setNome(String nome) { this.nome = nome; }

public String getPaco() { return paco; }
public void setPaco(String paco) { this.paco = paco; }

public String getLacr() { return lacr; }

public void setLacr(String lacr) { this.lacr = lacr; }

//public void setLacr(String lacr) { this.lacr = setaInteiro(lacr); }
@Override

public String toString() {

String nomes = getCage();

nomes += getNome();

return nomes;

}

}
                  • Classe AgenciaJRDataSource   * * * * * * * * * *
                    
import java.util.Iterator;

import java.util.Vector;

import net.sf.jasperreports.engine.JRDataSource;

import net.sf.jasperreports.engine.JRException;

import net.sf.jasperreports.engine.JRField;
public class AgenciaJRDataSource implements JRDataSource {

private Iterator iterator;

private Agencia cursor;

public AgenciaJRDataSource(Vector agencia) {

super();

iterator = agencia.iterator();

}

public boolean next() throws JRException {

boolean retorno = iterator.hasNext();

if (retorno) { cursor = iterator.next(); }

return retorno;

}

public Object getFieldValue(JRField nome) throws JRException {

Agencia agencia = cursor;

if (nome.getName().equals(cage)) { return agencia.getCage(); }

if (nome.getName().equals(nome)) { return agencia.getNome(); }

if (nome.getName().equals(lacr)) { return agencia.getLacr(); }

if (nome.getName().equals(paco)) { return agencia.getPaco(); }

return null;

}

}
                  • Classe JRDataSourceFabrica   * * * * * * * * * *
                    

import java.util.Vector;
import net.sf.jasperreports.engine.JRDataSource;

public class AgenciaJRDadosFabrica {
private static JRDataSource dados;

public static JRDataSource criacaoDosDados() {

if (dados    == null) {

String cage = 1908;

String nome = CSO BH;

String lacr = 7234578;

String paco = 1;

Agencia ag  = new Agencia(cage, nome, lacr, paco);

Vector vitor = new Vector();

vitor.add(ag);

cage        = 0012;

nome        = SETE LAGOAS;

lacr        = 1234678;

paco        = 10;

ag          = new Agencia(cage, nome, lacr, paco);

vitor.add(ag);

cage        = 0020;

nome        = MATOZINHOS;

lacr        = 4444444;

paco        = 7;

ag          = new Agencia(cage, nome, lacr, paco);

vitor.add(ag);

cage        = 0022;

nome        = PRUDENTE DE MORAIS;

lacr        = 3245671;

paco        = 4;

ag          = new Agencia(cage, nome, lacr, paco);

vitor.add(ag);

//= = = = = =

dados       = new AgenciaJRDataSource(vitor);

System.out.println(Passou dentro do criacaoDosDados);

} else System.out.println(Passou FORA do criacaoDosDados);

return dados;

}

}
                  • Classe GerarRelatorio   * * * * * * * * * *
                    
import java.util.HashMap;

import java.util.Map;

import net.sf.jasperreports.engine.JRDataSource;

import net.sf.jasperreports.engine.JRException;

import net.sf.jasperreports.engine.JasperFillManager;

import net.sf.jasperreports.view.JasperViewer;
public class GerarRelatorio {

public static void gerarRelatorio(JRDataSource source) throws JRException {

Map map = new HashMap();

String visao = “…/dist/Folha_A4.jrprint;

jaspa        = “…/teste/dist/Folha_A4.jasper;

JasperFillManager.fillReport(jaspa, map, source);

JasperViewer.viewReport(visao, false);

}
public static void main (String[] args) {

try {

System.out.println(Antes da emissao do relatorio);
GerarRelatorio.gerarRelatorio(AgenciaJRDadosFabrica.criacaoDosDados());
  System.out.println("Depois da emissao do relatorio");
}catch (JRException e) { e.printStackTrace(); }
}

}

= = = = = = = =

5 Respostas

Ygor

Tenta colocar o endeço absoluto ao invés de só "…/teste/dist/Folha_A4.jasper"
Creio que seja isso

drsmachado

O erro está ocorrendo na execução do trecho

GerarRelatorio.gerarRelatorio(AgenciaJRDadosFabrica.criacaoDosDados());
Creio que o que o Ygor postou tem lógica, porém, revise todo o conteúdo deste método.

R

Pessoal, boa noite,
Primeiramente, grato pela atencao de todos. Porem o que esta ocasionando o erro, nao eh isto, pois se o arquivo.JASPER nao tivesse sido encontrado, o erro seria FileNotFound. O aplicativo esta achando o arquivo, esta passando pela classe FABRICA, porem nao esta conseguindo mostrar o relatorio. Deve ter algum macete, talvez dentro do IReport, para que o mesmo funcione.
Mais uma vez, obrigado pela atencao.

M

Rogério,

Você conseguiu resolver esse problema?
Estou com mesmo problema.

Abraço

M

Olá Rogério,
Não sei se já resolveu, mas de qualquer forma pode ser útil pra alguém:

Provavelmente está faltando algum jar no seu projeto para gerar o relatório sem nenhum erro.
A lista dos jars que você pode precisar são:

commons-beanutils
commons-collections
commons-digester
commons-logging
groovy-all
iText
jasperreports

Espero ter ajudado.
Fica com Deus.

Criado 11 de novembro de 2010
Ultima resposta 12 de jul. de 2011
Respostas 5
Participantes 5