使用 JasperReports API 的代码中获得了"java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory"



我正在制作一个简单的独立桌面应用程序,它将根据传递给程序的值生成报告。没有数据库使用情况。我用iReport设计器设计了我的JasperReports报告,并添加了一个参数ID_NO和一个文本字段,表达式$P{ID_NO}

我可以成功预览报告,看看我所期望的。但我不能从Java应用程序生成报告,并从那里传递参数ID_NO。下面是我的代码:

public class MyReportViewer extends JFrame {
    public MyReportViewer(String fileName) {
        this(fileName,null);
    }
    public MyReportViewer(String fileName,HashMap<String, Object> parameter) {
        super("View Report");
        try {
            JasperPrint print = JasperFillManager.fillReport(fileName, parameter);
            JRViewer viewer = new JRViewer(print);
            Container c = getContentPane();
            c.add(viewer);
        } catch(Exception e) {
            e.printStackTrace();
        }
        setBounds(10, 10, 600,500);
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    }
    public static void main(String args[]) {
        HashMap<String, Object> param = new HashMap<String, Object>();
        param.put("ID_NO", "101-15-980");
        MyReportViewer viewer = new MyReportViewer("test.jasper", param);
        viewer.setVisible(true);
    }
}

代码给出一个异常

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
    at net.sf.jasperreports.engine.util.JRLoader.<clinit>(JRLoader.java:61)
    at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:267)
    at jspertest.MyReportViewer.<init>(MyReportViewer.java:37)
    at jspertest.MyReportViewer.main(MyReportViewer.java:60)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)

And not run.

请给我一个提示。我以前从未使用过JasperReports或任何类型的报表生成器。

编辑:

添加了jasperreports4.x.x/lib/..中的所有库文件。到项目。现在例外消失了。现在控制台显示-

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

和一个小弹出框显示文档中没有页面。出现一个没有报告的小窗口。

您的异常与Parameter问题无关,这显然看起来很好。

看起来你的类路径中缺少Apache Commons Logging。它以预览模式运行,因为您的IDE确实有正确的类路径。

没错。"The document has no pages"表示数据源中没有记录,因此不生成报告。

您可以设置这样的属性,即使数据不在报表中,报表仍将显示空白页。

当NO Data属性将允许您在数据集返回零行或报告没有数据打印的情况下选择不同的值和显示报告的不同方式

最新更新