打包到JAR后编译报表时出错

时间:2016-08-29 15:40:07

标签: java eclipse jar compiler-errors jasper-reports

所以我在Windows 7上使用Eclipse(jdk 1.8.0_74)在Java中开发了这个程序,用户可以在某个时候使用来自数据库的数据生成报告。

要创建此报告,我使用了TIBCO Jaspersoft Studio-6.3.0,它生成了.jrxml和.jasper。为了让我的程序识别这些文件,我将它们复制到报告包中。

当我在Eclipse上运行时,一切都运行得很好;报告生成,能够打印,一切。

现在出现问题:当我导出到可运行的JAR(导出> Runnable JAR文件>将所需的库提取到生成的JAR 中)时,它根本不会生成;向我显示编译错误。

有以下代码:

public final void gerarRelatorio() {
    if (dateChooser.getDate() == null) {
        JOptionPane.showMessageDialog(null, "Preencha o campo de data!");
    } else {
        try {
            JOptionPane.showMessageDialog(null, "Seu relatório será gerado...");

            JasperReport report = JasperCompileManager
                    .compileReport(getClass().getResourceAsStream("RelatorioAttr.jrxml"));

            if (new DAORelatorioImpl().preencherRelatorioATratar(dateChooser.getCalendar())
                    .isEmpty()) {
                JOptionPane.showMessageDialog(null,
                        "Nenhum dado foi encontrado para essa data!");
            } else {
                JasperPrint print = JasperFillManager.fillReport(report, null,
                        new JRBeanCollectionDataSource(new DAORelatorioImpl()
                                .preencherRelatorioATratar(dateChooser.getCalendar())));

                JOptionPane.showMessageDialog(null, "Relatório Gerado com Sucesso!");

                JasperViewer jv = new JasperViewer(print, false);
                jv.setVisible(true);
                jv.toFront();
            }

        } catch (HeadlessException | JRException e) {
            JOptionPane.showMessageDialog(rootPane, "Erro 1: " + e);
            e.printStackTrace();
        } catch (ConexaoException | DAOException ex) {
            JOptionPane.showMessageDialog(rootPane, "Erro 2: " + ex);
        }
    }
}

再一次在Eclipse上运行时它运行得很好,但是当我尝试在编译的JAR上使用时会发生这种异常:

net.sf.jasperreports.engine.JRException: Error compiling report java source files: C:\Users\guilherme.brandao\workspace\RelatorioAttr_1472481426930_73428.java

我不知道如何解决这个问题主要是因为我甚至不知道这个文件是什么或者它在哪里创建。

如果您能提供任何帮助,我将不胜感激。

1 个答案:

答案 0 :(得分:2)

解决方法是通过以下代码更改为加载已编译的.jasper而不是.jrxml:

JasperReport report = JasperCompileManager
            .compileReport(getClass().getResourceAsStream("RelatorioAttr.jrxml"));

InputStream jasperStream = getClass().getResourceAsStream("RelatorioAttr.jasper");
JasperReport report = (JasperReport) JRLoader.loadObject(jasperStream); 
相关问题