Metodo para chamar relatorios IReport

Alguem pode me dizer o que há de errado nesse metodo que chama o relatorio que eu tenho?
pois quando a linha:

JasperReport jr = (JasperReport) JRLoader.loadObject(localRelatorio);

é executada, para por ai, nao dá erro, nao dá nada…simplesmente nao funciona.

public void rel() throws JRException, MalformedURLException, Exception {
        //URL localRelatorio = new URL("D:/Leite_Novo/Leite/web/RelAdiantamento.jasper");
        String localRelatorio = "D:/Leite_Novo/Leite/web/RelAdiantamento.jasper";
        HashMap parameters = new HashMap();

        try {
            // O objeto JasperReport representa o objeto JasperDesign (arquivo .jrxml) compilado.
            // Ou seja, o arquivo .jasper
            JasperReport jr = (JasperReport) JRLoader.loadObject(localRelatorio);

            // JasperPrint representa o relatório gerado.
            // É criado um JasperPrint a partir de um JasperReport, contendo o relatório preenchido.
            this.jasperPrint_ = JasperFillManager.fillReport(jr, parameters, Conexao.Conecta());

        } catch (JRException e) {
            FacesMessage msgd = new FacesMessage(
                    "Erro relatório. " + e.getMessage());
            FacesContext.getCurrentInstance().addMessage(null, msgd);
        }
    }

O seu código já gerou um arquivo .jrprint ?

Nao, nao gerou, ou nao sei onde ele gera no caso

Sabe me dizer onde gera, ou como que gera?

O arquivo .jrprint é gerado no diretório onde está o seu arquivo .jrxml e .jasper.

Dá uma olhada neste código que eu já tinha feito a um tempo atrás…
Talvez te ajude.

[code]public void gerarRelatorioAnual(String ano){
Statement stm;
try{
Connection conexao = Banco.getConexao();
stm = conexao.createStatement();
//você ira colocar aqui, sua pesquisa so banco de dados
query = “select id_doacao, nome, data_ligacao, data_busca, material_doado, telefone from sistematest.doacao where year(data_ligacao) like '%”+ano+"%’";
ResultSet rs = stm.executeQuery( query );
JRResultSetDataSource jrRS = new JRResultSetDataSource( rs );
Map parameters = new HashMap();
JasperFillManager.fillReportToFile(“Relatorios//RelatorioAnual.jasper”, parameters, jrRS);

        //Exportação para pdf
        long start = System.currentTimeMillis();
        JasperExportManager.exportReportToPdfFile("Relatorios//RelatorioAnual.jrprint");
        System.err.println("PDF creation time : " + (System.currentTimeMillis() - start));
    }catch(Exception e){
        System.out.println("Database error!");
        e.printStackTrace();
    }
}[/code]

Entao cara, esse arquivo jrprint, nao está na pasta onde é salvo o relatorio.

Estou fazendo no netbeans, pelo plugin do IReport 4.0.1

usando do teu jeito que me passou, fiz com o caminho do relatorio

JasperFillManager.fillReportToFile("Relatorios//RelAdiantamento.jasper", parameters, jrRS);

E esse é o erro:
“java.io.FileNotFoundException: Relatorios\RelAdiantamento.jasper”

Ele nao acha, porem se eu colocar o local fixo:

JasperFillManager.fillReportToFile("D:/Leite_Novo/Leite/src/java/Relatorios/RelAdiantamento.jasper", parameters, jrRS);

Acontece esse erro:

“cannot assign instance of net.sf.jasperreports.engine.base.JRBaseLine to field net.sf.jasperreports.engine.base.JRBasePen.penContainer of type net.sf.jasperreports.engine.JRPenContainer in instance of net.sf.jasperreports.engine.base.JRBasePen”

Sabe me dizer o que pode ser??
Preciso entregar o sistema e so me falta a visualizaçao esses relatorios, o resto já está ok, estou aqui parado sem soluçao…

Você precisa mostrar o relatório com o visualizador padrão o iReport ou exportar para PDF? Como você pretende apresentar o relatório?

Caso você queira mostrar seu relatório em PDF da uma olha neste Tutorial.

Entao, quero exportar para PDF mesmo
O exemplo que me passou é mto proximo aos que eu já vi, e acaba acontecendo o mesmo erro de cima:

“cannot assign instance of net.sf.jasperreports.engine.base.JRBaseLine to field net.sf.jasperreports.engine.base.JRBasePen.penContainer of type net.sf.jasperreports.engine.JRPenContainer in instance of net.sf.jasperreports.engine.base.JRBasePen”

Literalmente nao sei qual é a “cagada” que estou fazendo, mas já viu algo desse tipo, o que pode ser?

Tem certeza que todos os jar’s necessários para o funcionamento do iReport estão no seu projeto?

Qualquer coisa confere aqui para ver se você realmente tem todos os jar’s no projeto.

Os outros relatórios funcionam normalmente? Esse tem alguma coisa diferente dos outros?

To te mandando aqui a lista das minhas libs

jsf-api.jar
jsf-impl.jar
jstl-api.1.2.jar
jstl0impl-1.2.jar
postgresql-8-3-603.jdbc3.jar
primefaces-2.2.1.jar
primefaces-2.2.1-sources.jar
commons.beanutils-1.8.2.jar
commons-collections-3.2.1.jar
commons-javaflow-20060411.jar
commons-logging-1.1.jar
iText-2.1.7.jar
jasperreports-4.0.1.jar
jasperreports-fonts.4.0.1.jar
poi-3.6.jar

E quanto a ultima pergunta, eu to fazendo o meu primeiro relatorio, ou seja, ate agora nada funcionou, e nao tem nenhum misterio ate entao que eu tenha visto pra fazer, roda tanto no Ireport normal quanto no plugin do netbeans.

Obrigado até entao pela ajuda…

Só de olhar já deu para ver que está faltando algumas bibliotecas, por exemplo o jFreeChart, se tiver algum grafico, o relatório não vai funcionar, pois não tem este jar.

De uma olhada neste tutorial de um colega do Forum.

Neste tutorial do David Buzatto, ele explica desde a instalação do iReport no NetBeans e a configuração(incluindo os jar’s) até a criação de relatórios, vale a pena dar uma olhada.

No tutorial fala sobre o Servlet, manda criar e tudo mais de forma alguma é usado essa classe? sabe como é usado essa classe?

pq mesmo adicionando todas as libs que é pedido, nao deu certo ainda, nao sei o que faço mais…todos os exemplos nao dao certo. Se tiver alguma luz.
Obrigado!

Josivanl,

Tente adicionar TODAS as libs do iReport(Isto tem que ser realmente medida extrema, pois vai “sujar” totalmente suas lib’s com jar’s que você muito provavelmente não vai utilizar).

Vale a pena tentar fazer isso apenas para ver se isso vai funcionar.

Essas lib’s você encontra na pasta do iReport quando você faz o download e instala na sua maquina, eu fiz o download aqui e fiz uma lista dos .jar que estão na pasta(“Jaspersoft\iReport-4.0.1\ireport\modules\ext”).

ant-1.7.1.jar
antlr-2.7.6.jar
asm.jar
asm-attrs.jar
barbecue-1.5-beta1.jar
barcode4j-2.0.jar
batik-anim.jar
batik-awt-util.jar
batik-bridge.jar
batik-css.jar
batik-dom.jar
batik-ext.jar
batik-gvt.jar
batik-parser.jar
batik-script.jar
batik-svg-dom.jar
batik-svggen.jar
batik-util.jar
batik-xml.jar
bcel-5.2.jar
bsh-2.0b4.jar
castor-1.2.jar
cglib-2.1.jar
cincom-jr-xmla.jar
commons-beanutils-1.8.2.jar
commons-collections-3.2.1.jar
commons-dbcp-1.2.2.jar
commons-digester-1.7.jar
commons-javaflow-20060411.jar
commons-logging-1.1.jar
commons-math-1.0.jar
commons-pool-1.3.jar
commons-vfs-1.0.jar
dom4j-1.6.jar
ehcache-1.1.jar
eigenbase-properties-1.1.0.10924.jar
eigenbase-resgen-1.3.0.11873.jar
eigenbase-xom-1.3.0.11999.jar
ejb3-persistence.jar
groovy-all-1.7.5.jar
hibernate3.jar
hibernate-annotations.jar
hibernate-commons-annotations.jar
hsqldb-1.8.0-10.jar
iText-2.1.7.jar
iTextAsian.jar
jakarta-bcel-20050813.jar
jasperreports-4.0.1.jar
jasperreports-chart-themes-4.0.1.jar
jasperreports-extensions-3.5.3.jar
jasperreports-fonts-4.0.1.jar
javacup.jar
javassist-3.4.GA.jar
jaxen-1.1.1.jar
jcommon-1.0.15.jar
jdt-compiler-3.1.1.jar
jfreechart-1.0.12.jar
jpa.jar
js_activation-1.1.jar
js_axis-1.4patched.jar
js_commons-codec-1.3.jar
js_commons-discovery-0.2.jar
js_commons-httpclient-3.1.jar
js_jasperserver-common-ws-3.5.0.jar
js_jaxrpc.jar
js_mail-1.4.jar
js_saaj-api-1.3.jar
js_wsdl4j-1.5.1.jar
jta.jar
jxl-2.6.10.jar
log4j-1.2.15.jar
mondrian-3.1.1.12687-Jaspersoft.jar
olap4j-0.9.7.145.jar
png-encoder-1.5.jar
poi-3.6.jar
rex-20080421.jar
rhino-1.7R1.jar
saaj-api-1.3.jar
slf4j-api.jar
slf4j-log4j12.jar
spring.jar
sqleonardo-2009.03.rc1.jar
swingx-2007_10_07.jar
xml-apis.jar
xml-apis-ext.jar

Tome cuidado para que não deixe .jar duplicados ou com 2 versões diferentes.

PS: Faça um backup do projeto.

Dan xD,

Eu adicionei todas essas libs, fiz como estava no exemplo que vc me passou, porem nao tem forma alguma de rodar, já nao sei mais o que fazer, estou empacado nisso desde semana passada e sem sucesso em nada das tentativas que fiz.

Eu fiz conforme o exemplo que me passou, e criei aquele Servlet, porem nunca use, no exemplo pede para que eu chame ele, execute no caso, msa nao sei como faço para executar, chamar no meu browser

hoje chamo as minhas telas dessa forma no menu, por exemplo:

 <p:submenu label="Relatórios" icon="ui-icon ui-icon-extlink">
                                    <p:menuitem value="Adiantamentos" url="/faces/RelatorioAdiantamento.xhtml"/>
                                </p:submenu>

To literalmente já meio perdido nisso…já tentei de tudo nada.
Obrigado ate entao pela ajuda!

O problema aparenta ser mesmo de jar.

Eu estou em um ambiente que não está configurado para desenvolvimento JAVA, por isso não vou ter como te ajudar testando.

Esse seu relatório está com muitos campos? tem alguma coisa diferente nele? Já tentou fazer um relatório novo, sem SQL sem nada, só com um Label dentro com alguma coisa escrita e tentou chamar ele para ver se da o mesmo erro?

As vezes pode ser algum campo que tem alguma coisa que está dando problema.

Muito estranho, mas consegui inexplicavelmente fazer funcionar.
Porém o que acontece, quando eu executo as vezes o relatorio, ele simplesmente aparece embranco, e oras aparece com dados, sabe me dizer o pq disso??

Metodo que chama o criaçao do relatorio, invocado pela minha View!

public void relatorio() throws Exception {
        ResultSet rs = Conexao.Consulta("select la.codigo, la.valor, to_char(la.data,'DD/MM/YYYY') as data, "
                + "f.nome as descfornecedor, f1.nome as descterceiro, ll.descricao as lote "
                + "from admleite.leite_adiantamentos la "
                + "left join admleite.leite_fornecedores lf on lf.codfornecedor = la.fornecedor "
                + "left join fornecedores f on f.codigo = lf.codfornecedor "
                + "left join fornecedores f1 on f1.codigo = la.for_terceiro "
                + "left join admleite.leite_lote ll on ll.codigo = la.lote");

        Map parameters = new HashMap();
        RelatorioPadrao.criaRel("RelAdiantamento.jasper", rs, parameters);
    }

Cria o relatorio

private static FacesContext context;
    private static ServletContext servletContext;
    private static String caminhoRelatorio;

    public static void criaRel(String caminho, ResultSet rs, Map parametrs) throws JRException {
        try {
            JRResultSetDataSource jrRS = new JRResultSetDataSource(rs);

            context = FacesContext.getCurrentInstance();
            servletContext = (ServletContext) context.getExternalContext().getContext();

            caminhoRelatorio = servletContext.getRealPath("WEB-INF/classes/Relatorios/" + "/" + caminho);

            JasperPrint relat = JasperFillManager.fillReport(caminhoRelatorio, parametrs, jrRS);
            JasperViewer.viewReport(relat, false);
        } catch (Exception e) {
            FacesMessage msg = new FacesMessage(
                    "Erro ao gerar relatório. " + e.getMessage());
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

Veja se tem alguma coisa que eu estou fazendo de errado que as vezes gera o relatorio legal, as vezes simplesmente abre embranco.
Obrigado!