使用JasperReports API在代码中得到了’java.lang.NoClassDefFoundError:org / apache / commons / logging / LogFact

我正在开发一个简单的独立桌面应用程序,该应用程序将根据传递给程序的值生成报告.没有数据库使用情况.我已经使用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)

并且不运行.

请给我一个线索.我以前从未使用过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.

一个小的弹出窗口说文档中没有页面.出现一个小窗口,其中没有报告.

解决方法:

您的异常与参数问题无关,看起来很不错.

看来您在类路径中缺少Apache Commons Logging.它在预览模式下运行,因为您的IDE确实具有正确的类路径.

上一篇:java-使用GWT编译时替换类


下一篇:java.lang.NoClassDefFoundError:javax / servlet / http / HttpServletRequest [复制]