填充编译报告时,JasperReports隐藏异常

时间:2013-04-30 19:20:19

标签: java exception groovy jasper-reports

我正在使用JasperReports 5.0.0在我的Java应用程序中生成报告 当我加载&从.jrxml文件编译报告没有问题。
但是当我尝试从编译报告(.jasper文件)加载它时,它会停止操作,没有任何异常! 我用一个try语句包围JasperFillManager.fillReport语句,捕获Throwable,如下所示:

jasperReport = (JasperReport) JRLoader.loadObject(new FileInputStream(new File(Main.jarpath,Main.REPORT_TEMPLATE)));
try{
    jasperPrint  = JasperFillManager.fillReport(jasperReport, parameters, new JRBeanCollectionDataSource(data));
}catch(Throwable ex){
    ex.printStackTrace();
}

现在它打印出这个异常:

java.lang.NoSuchMethodError: groovy.lang.MetaClassImpl.createPogoCallCurrentSite(Lorg/codehaus/groovy/runtime/callsite/CallSite;Ljava/lang/Class;[Ljava/lang/Object;)Lorg/codehaus/groovy/runtime/callsite/CallSite;
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallCurrentSite(CallSiteArray.java:108)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:49)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141)
        at pe_report_1367344395908_105126.customizedInit(calculator_pe_report_1367344395908_105126:87)
        at net.sf.jasperreports.engine.fill.JREvaluator.init(JREvaluator.java:88)
        at net.sf.jasperreports.engine.fill.JRCalculator.init(JRCalculator.java:111)
        at net.sf.jasperreports.engine.fill.JRFillDataset.initCalculator(JRFillDataset.java:469)
        at net.sf.jasperreports.engine.fill.JRBaseFiller.<init>(JRBaseFiller.java:529)
        at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:88)
        at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:103)
        at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:61)
        at net.sf.jasperreports.engine.fill.JRFiller.createFiller(JRFiller.java:153)
        at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:82)
        at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:653)
        at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:969)
        at pe.reporting$1.doInBackground(reporting.java:75)
        at pe.reporting$1.doInBackground(reporting.java:41)
        at javax.swing.SwingWorker$1.call(SwingWorker.java:278)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
        at javax.swing.SwingWorker.run(SwingWorker.java:317)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:619)

有什么问题?

1 个答案:

答案 0 :(得分:2)

这是与groovy jar相关的类路径问题。如果您使用groovy表达式,则需要将groovy jar添加到类路径中。

要找到你需要的那个,简单的方法是:

如果您在报告中没有使用groovy,则可以简单地删除jrxml中jasperReport xml标记中的language atrribute。这(至少在旧版本中)默认为表达式的java用法。

相关问题