使用JasperReports API在代码中获得'java.lang.NoClassDefFoundError:org / apache / commons / logging / LogFactory` [英] Got 'java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory` in code using JasperReports API

查看:528
本文介绍了使用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);

容器c = getContentPane();
c.add(viewer);
} catch(例外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);
}
}

代码提供异常

$ b在$.s $。 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)
引起: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.xx / lib / ..中的所有库文件添加到项目中。现在异常消失了。现在控制台说 -

  log4j:WARN没有为logger找到appender(net.sf.jasperreports.extensions.ExtensionsEnvironment) 。 
log4j:WARN请正确初始化log4j系统。

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

解决方案

您的异常与参数问题无关,显然看起来不错。



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


I am working on a simple standalone desktop application which would generate report based on the values passed to the program. There is no database usage. I have designed my JasperReports report with the iReport designer and added a parameter ID_NO and a text field with expression $P{ID_NO}

I can preview the report successfully and see what I expected. But I cant generate the report from Java application and pass the parameter ID_NOfrom there. Here is my code:

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);
    }
}

The code gives a exception

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 does not run.

Please give me a clue. I have never used JasperReports or any kind of report generator before.

Edit:

Added all the library files from jasperreports4.x.x/lib/.. to the project. Now the exception is gone. Now the console says-

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

and a small popup says there are no pages in the document. A small windows appears with no report in it.

解决方案

Your exception is not related with the Parameter issue, which apparently looks good.

It looks like you are missing Apache Commons Logging in your classpath. It runs in preview mode because your IDE does have the correct classpath.

这篇关于使用JasperReports API在代码中获得'java.lang.NoClassDefFoundError:org / apache / commons / logging / LogFactory`的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆