2011-10-25 16 views
3

我正在研究一個簡單的獨立桌面應用程序,它將根據傳遞給程序的值生成報告。沒有數據庫使用。我設計我的JasperReports報告與iReport的設計師,並添加參數ID_NO,並表達$P{ID_NO}使用JasperReports API在代碼中得到了'java.lang.NoClassDefFoundError:org/apache/commons/logging/LogFactory'API

的文本字段我可以成功預覽報表,看看我的預期。但我不能從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. 

和一個小的彈出窗口中說,文檔中沒有頁面。出現一個小窗口,沒有報告。

+0

當你運行這段代碼時會發生什麼?它是否編譯?它是否會拋出異常?如果是這樣,什麼是堆棧跟蹤?你在框架中看到什麼東西嗎?什麼? –

+0

對不完整的問題抱歉。最後幾行缺少,編輯過一會兒你會看到 – shababhsiddique

回答

3

你的異常與參數問題無關,這顯然看起來不錯。

它看起來像缺少Apache Commons Logging在你的類路徑中。它以預覽模式運行,因爲您的IDE具有正確的類路徑。

+1

從http://commons.apache.org/logging/下載jar並添加到你的類路徑中。您可能會缺少一些圖書館 –

+1

http://jasperforge.org/uploads/publish/jasperreportswebsite/trunk/requirements.html包含一個包含所需庫的表。 –

+0

我已經從jasperreports-4.1.2 \ lib中添加了所有jar文件,現在異常消失了,出現一個窗口彈出窗口 - 「文檔沒有頁面」,我也可以在控制檯中看到消息 - 「log4j:WARN記錄器沒有找到appender(net.sf.jasperreports.extensions.ExtensionsEnvironment)。 log4j:WARN請正確初始化log4j系統。「 – shababhsiddique

1

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

0

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

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

相關問題