[Resolvido] Erro no relatório ao criar um .jar

13 respostas Resolvido
J

No netbeans meu relatório esta sendo criado perfeitamente mais ao criar o .jar o arquivo .jrxml nao e copiado e o .jar deixa de criar o meu relatório. Meu código que gera o relatório

public void imprimir(LinkedList lista) throws Exception {

JasperReport report = JasperCompileManager.compileReport(this.getPathToReportPackage() + "Re_Setor.jrxml");
    JasperPrint print = JasperFillManager.fillReport(report, null, new JRBeanCollectionDataSource(lista));
    

    JasperExportManager.exportReportToPdfFile(print, "C:/Users/TI/Documents/Relatorio_de_Setor.pdf");

    File pdf = new File("C:/Users/TI/Documents/Relatorio_de_Setor.pdf");
    try {
        Desktop.getDesktop().open(pdf);
    } catch (Exception ex) {
        ex.printStackTrace();
        JOptionPane.showMessageDialog(null, "Erro no Desktop: " + ex);
    }
}

13 Respostas

darlan_machado

E onde você colocou o jrxml?

J

ele estava em build\classes\Relatorios.
so que quando eu limpo e construo ele some de la e não e copiado para o .jar

darlan_machado

Por que você não o coloca dentro do próprio projeto? Com isso, você o empacotaria ao gerar o jar e não teria o problema.

J

então justamente aqui que não consigo buscar se não for nesse diretório build\classes\Relatorios.
como mudo na onde busco esse .jrxml

darlan_machado

Então, quando você dá um limpar e construir, você exclui tudo o que está no build. Logo, o relatório vai pras cucuias.
Agora, você só postou uma parte da coisa:

O método getPathToReportPackage é o que contém o código que precisamos.

J

entendi minha classe inteira esta asim:

public class RelatorioSetor {
private String path; //Caminho base

private String pathToReportPackage; // Caminho para o package onde estão armazenados os relatorios Jarper

//Recupera os caminhos para que a classe possa encontrar os relatórios
public RelatorioSetor() {
    this.path = this.getClass().getClassLoader().getResource("").getPath();
    this.pathToReportPackage = this.path + "Relatorios/";
    System.out.println(path);
}

//Imprime/gera uma lista de Setores
public void imprimir(LinkedList<Setor> lista) throws Exception {

    JasperReport report = JasperCompileManager.compileReport(this.getPathToReportPackage() + "Re_Setor.jrxml");
    JasperPrint print = JasperFillManager.fillReport(report, null, new JRBeanCollectionDataSource(lista));
    JasperExportManager.exportReportToPdfFile(print, "C:/Users/TI/Documents/Relatorio_de_Setor.pdf");

    File pdf = new File("C:/Users/TI/Documents/Relatorio_de_Setor.pdf");
    try {
        Desktop.getDesktop().open(pdf);
    } catch (Exception ex) {
        ex.printStackTrace();
        JOptionPane.showMessageDialog(null, "Erro no Desktop: " + ex);
    }
}

public String getPathToReportPackage() {
    return this.pathToReportPackage;
}

public String getPath() {
    return this.path;
}
darlan_machado

Web ou desktop?

J

desktop

darlan_machado
Solucao aceita

Então, você pode criar um diretório dentro do diretório src, com o nome “relatorios”, por exemplo e nele inserir o arquivo jasper.
A partir disso, você invoca o arquivo utilizando:

InputStream isRelatorio = getClass().getResourceAsStream("/relatorios/blablabla.jasper");

Conforme apresentado neste tutorial

Depois, o resto é fácil.

J

ok essa classe RelatorioSetor que postei ja esta dentro de src/relatorios.

mais esse código eu irei colocar em qual lugar no meu método e teria que apagar algum?

ok irei da uma olhada nesse tutorial.

darlan_machado

Em que parte do relatório você usa o caminho do arquivo do relatório?
veja o link que passei.

J

li o link que mandou porem fiquei com mais duvida.

você e ele estão fazendo de um jeito e eu tinha feito de outro. vocês estão usando .jasper e no tutorial que eu tinha seguido que foi com que eu consegui fazer o relatório esta falando sobre o .jrxml

darlan_machado

Realmente, não existe apenas um modo de fazer.
O uso do jasper vai evitar que você tenha que recompilar o seu relatório.
De qualquer maneira, você ainda pode seguir o mesmo passo a passo sugerido e utilizar o jrxml.

Criado 12 de julho de 2018
Ultima resposta 12 de jul. de 2018
Respostas 13
Participantes 2