2012-07-19 29 views
1

我試圖獲得我在JTable中使用Jasper Reports打印報表的數據。我發現Usando o JRBeanCollectionDataSourceJava beans as Jasper Reports data source using JRBeanCollectionDataSource作爲範例來創建自己的代碼:JTable to iReport

package Negocio.Relatorios; 

import Negocio.Contato; 
import java.io.InputStream; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
import net.sf.jasperreports.engine.JRException; 
import net.sf.jasperreports.engine.JasperFillManager; 
import net.sf.jasperreports.engine.JasperPrint; 
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; 
import net.sf.jasperreports.view.JasperViewer; 

public class DataFromRelatorios{ 

    public void exibirRelatorio(List<Contato> contatos){ 

     String caminhoJasper = "./etiquetas.jasper"; 
     JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(contatos); 
     Map parameters = new HashMap(); 
     JasperPrint printer; 
     InputStream relJas = getClass().getResourceAsStream(caminhoJasper); 

     try { 
      printer = JasperFillManager.fillReport(relJas, parameters, dataSource); 
      JasperViewer viewer = new JasperViewer(printer, true); 
      viewer.setVisible(true); 
     } 
     catch (JRException ex) { 
      ex.printStackTrace(); 
     } 

    } 
} 

當動作事件發生此類稱爲:

private void btnGeraEtiquetasActionPerformed(java.awt.event.ActionEvent evt) {             
     geradorRelatorios.exibirRelatorio(relatorioTableModel.getDados()); 
    } 

這是我的跟蹤:

Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory 
    at net.sf.jasperreports.engine.util.JRLoader.<clinit>(JRLoader.java:65) 
    at net.sf.jasperreports.engine.JRPropertiesUtil.loadProperties(JRPropertiesUtil.java:99) 
    at net.sf.jasperreports.engine.DefaultJasperReportsContext.initProperties(DefaultJasperReportsContext.java:95) 
    at net.sf.jasperreports.engine.DefaultJasperReportsContext.<init>(DefaultJasperReportsContext.java:72) 
    at net.sf.jasperreports.engine.DefaultJasperReportsContext.<clinit>(DefaultJasperReportsContext.java:60) 
    at net.sf.jasperreports.engine.JasperFillManager.getDefaultInstance(JasperFillManager.java:85) 
    at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:956) 
    at Negocio.Relatorios.DataFromRelatorios.exibirRelatorio(DataFromRelatorios.java:25) 
    at GUI.JanGerenciaContato.btnGeraEtiquetasActionPerformed(JanGerenciaContato.java:239) 
    at GUI.JanGerenciaContato.access$300(JanGerenciaContato.java:21) 
    at GUI.JanGerenciaContato$4.actionPerformed(JanGerenciaContato.java:104) 
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) 
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) 
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) 
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) 
    at java.awt.Component.processMouseEvent(Component.java:6288) 
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3267) 
    at java.awt.Component.processEvent(Component.java:6053) 
    at java.awt.Container.processEvent(Container.java:2041) 
    at java.awt.Component.dispatchEventImpl(Component.java:4651) 
    at java.awt.Container.dispatchEventImpl(Container.java:2099) 
    at java.awt.Component.dispatchEvent(Component.java:4481) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577) 
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238) 
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168) 
    at java.awt.Container.dispatchEventImpl(Container.java:2085) 
    at java.awt.Window.dispatchEventImpl(Window.java:2478) 
    at java.awt.Component.dispatchEvent(Component.java:4481) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643) 
    at java.awt.EventQueue.access$000(EventQueue.java:84) 
    at java.awt.EventQueue$1.run(EventQueue.java:602) 
    at java.awt.EventQueue$1.run(EventQueue.java:600) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98) 
    at java.awt.EventQueue$2.run(EventQueue.java:616) 
    at java.awt.EventQueue$2.run(EventQueue.java:614) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:613) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    ... 47 more 

我以爲我有Jasper Reports的所有必要的庫,哪一個我缺少?

回答

1

我的猜測是您在類路徑中缺少Jakarta Commons Logging Component (version 1.0.4 or later)庫。您應該看看JasperReports Requirements以確保您擁有所需的其他所需庫以及相應的版本。另外,你提到你的數據是在一個JTable中,你可能想看看JRTableModelDataSource這將讓你使用Jtable的TableModel創建一個數據源。

+0

你好,我已經在這裏添加了所有罐子> http://jasperforge.org/uploads/publish/jasperreportswebsite/trunk/requirements.html但是當我運行它時,我得到了一個java.lang.NoClassDefFoundError,然後我看到了路徑,它是:「org/apache/commons/digester/Rule」,但是我的包看起來像:「org.commons.digester3.xmlrule」,這是一個版本問題? 而在本頁> http://commons.apache.org/digester/download_digester.cgi我只找到這些下載鏈接。 – guisantogui 2012-07-22 16:38:55

+0

我的猜測是你沒有使用其他相關庫的最新版本,或者jasper報告本身。我的recomendaton將被刪除所有您現有的圖書館,並重新開始。獲取最新版本的Jasper報告和Jasper Reports要求中列出的最新版本的庫。 – 2012-07-23 00:56:33