JasperReports:从jar调用报告



我正在使用NetBeans 7.2的JasperReports 4.7.1插件从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 = "SELECTn" +
                "     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_COSTn" +
                "FROMn" +
                "     `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);
    }
}

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

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

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

此外,你可以通过绕过警告

org.apache.log4j.BasicConfigurator.configure();

在课程开始时。

不要直接运行jar文件。相反,请从命令行使用java -jar myjar.jar运行它,正如@PeterMm在上面的评论中所说的那样,您将看到列出的错误。试着从中找出错误。我认为错误可能是NoClassDefFoundError,它是由于库文件的错误版本引起的。如果原因是这样,请下载包含缺少类定义的库jar文件的正确版本,并将其添加到项目库中,然后构建项目。

最新更新