NullPointerException / IReport

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

}
}
= = = = = = = =

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

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.

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.

Rogério,

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

Abraço

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.