Não consigo encontrar caminho do Relatório

2 respostas
G

Olá amigos do GUJ!

Estou brincando com iReport e Hibernate e estou com um probleminha: não consigo abrir um relatório, EXCETO se eu coloco o caminho inteiro do mesmo. Entretanto, como meu projeto será rodado em outras máquinas, eu não posso saber o caminho inteiro do relatório!

O código atual está assim:

Session s = NewHibernateUtil.getSessionFactory().getCurrentSession();
       s.beginTransaction();
       
       Criteria cri = s.createCriteria(Estado.class);
       cri.add(Restrictions.or(
               Restrictions.eq("idEstado", 1), 
               Restrictions.eq("idEstado", 2)
               ));
     
       System.out.println();
       List<Estado> xy = s.createQuery("from Estado").list();
        JasperReport jasperReport = JasperCompileManager.compileReport("report2.jrxml");
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,null,new JRBeanCollectionDataSource( cri.list() ) );
    
        JasperViewer viewer = new JasperViewer(jasperPrint,false);
        viewer.show();

Entretanto, EU NÃO SEI ONDE COLOCAR O report2.jrxml!!

Já coloquei na pasta src, na pasta acima da src, na pasta build/classes, e ele NÃO ACHA! Só acha se eu der o caminho completo!

Então, minha pergunta é: onde eu coloco este arquivo, para que ele possa abrir automaticamente?

OBSERVAÇÃO: Em minhas pesquisas no GUJ e na internet, encontrei algo como isto, que resolveria o problema:

getClass().getResource("report2.jrxml");

Entretanto, ele diz que não posso rodar isso a partir de um método estático, que é o meu caso. E no meu caso, eu vou rodar isso em um método estático. Então, essa solução não funciona pra mim. Alguém tem alguma outra?

Abraços!!!

2 Respostas

drsmachado

Desktop ou web?
A propósito, o que o hibernate tem a ver com os relatórios em jasper?
Bom, se for desktop, você pode criar, na raiz do projeto, uma pasta com o nome sugerido “relatórios” e colocar os arquivos ali.
A chamada deve ser algo como:

File arqRel = new File("/relatorios/nome_do_relatorio.jasper");

Isso deve resolver o problema.
Se for web, você precisa obter o servletcontext e encontrar o diretório onde colocou o relatório.

G

Obrigado, deu certo! Eu simplesmente coloquei os relatórios na raíz do projeto e chamei-os pelo nome, dessa forma:

JasperReport jasperReport = JasperCompileManager.compileReport("src/report2.jrxml");

Obrigado pela ajuda!

Criado 16 de outubro de 2013
Ultima resposta 16 de out. de 2013
Respostas 2
Participantes 2