JasperReports:从jar调用报告

时间:2013-11-27 19:23:56

标签: java jasper-reports

我正在使用 JasperReports 4.7.1插件 NetBeans 7.2 从mysql数据库生成报告 当我从ide运行应用程序时,没有问题发现接受此警告:

log4j:WARN No appenders could be found for logger (net.sf.jasperreports.engine.xml.JRXmlDigesterFactory).
log4j:WARN Please initialize the log4j system properly.

但报告生成并正确查看。

问题是,当我清理并构建应用程序然后从jar文件中将其从报告未生成时发出,并且没有给我任何例外,只是没有查看报告,其他一切都是正常的?

这是我用于在 JasperViewer 中查看报告的功能:

public void printInvoice(int invid) throws IOException {
    try {
        String sql = "SELECT\n" +
                "     ordersdetails.`ITEMNAME` AS ordersdetails_ITEMNAME,\n" +
                "     ordersdetails.`AMOUNT` AS ordersdetails_AMOUNT,\n" +
                "     ordersdetails.`PRICE` AS ordersdetails_PRICE,\n" +
                "     invoices.`INVOICEID` AS invoices_INVOICEID,\n" +
                "     invoices.`CUSTOMER` AS invoices_CUSTOMER,\n" +
                "     invoices.`THEDATE` AS invoices_THEDATE,\n" +
                "     invoices.`COST` AS invoices_COST\n" +
                "FROM\n" +
                "     `invoices` invoices RIGHT OUTER JOIN `ordersdetails` ordersdetails ON invoices.`INVOICEID` = ordersdetails.`INVOICE` where invoices.invoiceid=" + invid;

        InputStream in = this.getClass().getResourceAsStream("/reports/invoice.jrxml");

        JasperDesign jd = JRXmlLoader.load(in);

        JRDesignQuery q = new JRDesignQuery();
        q.setText(sql);
        jd.setQuery(q);

        JasperReport jasp_rep = JasperCompileManager.compileReport(jd);

        JasperPrint jasp_print = JasperFillManager.fillReport(jasp_rep, null, mc.getConnection());
        JasperViewer.viewReport(jasp_print, false);
    } catch (JRException e) {
        JOptionPane.showMessageDialog(null, e.getMessage());
        System.out.println(e);
    }
}

2 个答案:

答案 0 :(得分:1)

可以从错误的位置加载报告,尝试相对路径:

InputStream in = this.getClass().getResourceAsStream("reports/invoice.jrxml");

这意味着报告文件夹中有invoice.jrxml,该文件夹与调用getResourceAsStream的类(this.getClass())处于同一级别。

另外,你可以用

来解决警告
org.apache.log4j.BasicConfigurator.configure();

在你的课程开始时。

答案 1 :(得分:0)

请勿直接运行jar文件。而是从命令行使用java -jar myjar.jar来运行它,如 @PeterMmm 在上面的注释中所述,您将看到列出的错误。尝试从中查找错误。我认为该错误可能是NoClassDefFoundError,这是由于库文件的版本错误引起的。如果是这个原因,请下载包含缺少的类定义的库jar文件的正确版本,并将其添加到项目库并构建项目。