0

我的应用程序基于几个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。在 net.sf.jasperreports.engine.util.JRLoader.loadObjectFromLocation(JRLoader.java:244) 的 net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:85) 的 readObject(ObjectInputStream.java:351)在 net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:275) 在 net.sf.jasperreports.engine 的 net.sf.jasperreports.engine.fill.JRFillSubreport.evaluate(JRFillSubreport.java:316) .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)63) 在 net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:234) 在 net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:402) 在 reportmodule.Reportmodule.getReport(Reportmodule.java :329) 在 Login.Login$7.run(Login.java:344)63) 在 net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:234) 在 net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:402) 在 reportmodule.Reportmodule.getReport(Reportmodule.java :329) 在 Login.Login$7.run(Login.java:344)

请帮我解决这个问题。

4

1 回答 1

0

最后我发现了错误。这是因为其他一些项目(mainform.jar)是导入旧版本的jasper库(1.2)。从 mainform 中删除该库解决了我的问题。

于 2013-08-22T09:37:59.200 回答