java.lang.ClassCastException:无法将net.sf.jasperreports.engine.base.JRBaseImage的实例分配给字段

时间:2016-06-22 04:26:41

标签: java jasper-reports classcastexception

我正在jsf项目中处理JasperReports Library。首先,我只是通过这个tutorial

开发一个简单的项目

但在本教程中,没有指导如何安装完整的JasperReports库。

我尝试自己,但得到例外:

  

java.lang.ClassCastException:无法将net.sf.jasperreports.engine.base.JRBaseImage的实例分配给net.sf.jasperreports.engine.JRPenContainer类型的字段net.sf.jasperreports.engine.base.JRBasePen.penContainer例如net.sf.jasperreports.engine.base.JRBasePen

Caused by: java.lang.ClassCastException: cannot assign instance of net.sf.jasperreports.engine.base.JRBaseImage to field net.sf.jasperreports.engine.base.JRBasePen.penContainer of type net.sf.jasperreports.engine.JRPenContainer in instance of net.sf.jasperreports.engine.base.JRBasePen
    at java.io.ObjectStreamClass$FieldReflector.setObjFieldValues(ObjectStreamClass.java:2133)

以下是我尝试生成报告的方法:

JRBeanCollectionDataSource beanCollectionDataSource = new JRBeanCollectionDataSource(listOfStudent);
String reportPath = FacesContext.getCurrentInstance().getExternalContext().getRealPath("/reports/ChartReport.jasper");
JasperPrint jasperPrint = JasperFillManager.fillReport(reportPath, new HashMap(), beanCollectionDataSource);
JasperExportManager.exportReportToPdfStream(jasperPrint, outputStream);

和我正在使用的图书馆没有任何指南:

enter image description here

任何人都可以告诉我我在哪里做错了,我希望它错过了一些重要的库,但我无法使用任何适当的链接来下载库。

1 个答案:

答案 0 :(得分:0)

你的项目的类路径上有jasperreports-1.2.0.jar(这是Alex K观察到的非常陈旧)和jasperreports-javaflow.jar(未指定的版本)。

jasperreports-javaflow jars是jasperreports jar的变种,其中的类为基于Javaflow的子报告运行程序进行了检测。你不应该在类路径上同时拥有jasperreports.jar和jasperreports-javaflow.jar;除非你特别需要Javaflow子报告运行程序,否则请保留vanilla jasperreports.jar。