簡體   English   中英

使用JasperReports API在代碼中獲得'java.lang.NoClassDefFoundError:org / apache / commons / logging / LogFactory`

[英]Got 'java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory` in code using JasperReports API

我正在開發一個簡單的獨立桌面應用程序,它將根據傳遞給程序的值生成報告。 沒有數據庫使用。 我已經使用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.xx / 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確實具有正確的類路徑。

是啊,沒錯。 "The document has no pages"表示數據源中沒有記錄,因此不會生成報告。

即使報表中不存在數據,您也可以設置報表仍將顯示空白頁面的屬性。

當NO Data屬性允許您選擇不同的值和不同的顯示報表的方式,以防數據集返回零行或報表沒有要打印的數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM