【发布时间】:2013-08-24 16:51:52
【问题描述】:
我的应用程序基于几个 jar 文件:login.jar、mainform.jar、reportview.jar。
登录jar调用mainform.jar,同样会调用report view.jar。
所以在reportview 类中我有一个用JasperViewer 显示报告的方法:
reportSource = Reportpath + getReportname() + ".jasper";
HashMap para = new HashMap();
para.put(getReport_param1(), getParam1());
para.put(getReport_param2(), getParam2());
para.put(getReport_param3(), getParam3());
para.put(getReport_param4(), getParam4());
para.put(getReport_param5(), getParam5());
JasperPrint jp = JasperFillManager.fillReport(reportSource, para, con);
JasperViewer.viewReport(jp, false);
因此,作为单个项目,它可以 100% 正确运行并查看报告。
但是当我将这个类导入到 mainform 并调用 reportview 方法时,它没有运行。我用了
jasperreports-3.1.4.jar 文件用于 JasperReports 库。通过主要方法调用报告模块时,它可以正常工作。
但是从不同的 jar 调用时会出现此错误。
java.lang.ClassCastException:无法将 net.sf.jasperreports.engine.base.JRBaseTextField 的实例分配给 net.sf.jasperreports.engine.base.JRBaseLineBox.boxContainer 类型的字段 net.sf.jasperreports.engine.JRBoxContainer在 net.sf.jasperreports.engine.base.JRBaseLineBox 的实例中 在 java.io.ObjectStreamClass$FieldReflector.setObjFieldValues(ObjectStreamClass.java:2032) 在 java.io.ObjectStreamClass.setObjFieldValues(ObjectStreamClass.java:1212) 在 java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1953) 在 java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) 在 java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 在 java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 在 java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) 在 java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) 在 java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 在 java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 在 java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) 在 java.util.ArrayList.readObject(ArrayList.java:593) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974) 在 java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849) 在 java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 在 java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 在 java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) 在 java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) 在 java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 在 java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 在 java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) 在 java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) 在 java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 在 java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 在 java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) 在 net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:85) 在 net.sf.jasperreports.engine.util.JRLoader.loadObjectFromLocation(JRLoader.java:244) 在 net.sf.jasperreports.engine.fill.JRFillSubreport.evaluate(JRFillSubreport.java:316) 在 net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:275) 在 net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:399) 在 net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:1300) 在 net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:631) 在 net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:228) 在 net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:128) 在 net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:730) 在 net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:632) 在 net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:63) 在 net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:402) 在 net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:234) 在 reportmodule.Reportmodule.getReport(Reportmodule.java:329) 在 Login.Login$7.run(Login.java:344)
请帮我解决这个问题。
【问题讨论】:
-
请帮帮我。如果你们需要任何澄清,请告诉我。
-
最后我发现了错误。这是因为其他一些项目(mainform.jar)是导入旧版本的jasper库(1.2)。从 mainform 中删除该库解决了我的问题。感谢大家查看我的问题。
-
您可以将此评论作为答案发表
标签: java jasper-reports