为什么在调用JasperFillManager时在java.lang.Class.isAssignableFrom(Native Method)中得到java.lang.NullPointerException?

时间:2011-10-15 09:27:00

标签: java nullpointerexception jasper-reports

当我在其参数中传递sql连接时,JasperFillManager抛出一个空指针异常,但是当我传递JRResultSetDatasource时它运行正常。

java.lang.NullPointerException
at java.lang.Class.isAssignableFrom(Native Method)
at net.sf.jasperreports.engine.fill.JRFillTextField.getFormat(JRFillTextField.java:706)
at net.sf.jasperreports.engine.fill.JRFillTextField.evaluateText(JRFillTextField.java:394)
at net.sf.jasperreports.engine.fill.JRFillTextField.evaluate(JRFillTextField.java:368)
at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:258)
at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:499)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2036)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:760)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:270)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:128)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:946)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:845)
at net.sf.jasperreports.engine.fill.JRFillSubreport.fillSubreport(JRFillSubreport.java:609)
at net.sf.jasperreports.engine.fill.JRSubreportRunnable.run(JRSubreportRunnable.java:59)
at net.sf.jasperreports.engine.fill.JRThreadSubreportRunner.run(JRThreadSubreportRunner.java:205)
at java.lang.Thread.run(Unknown Source)

当我在fillReport中传递连接时,它会给出异常。

jasperPrint = JasperFillManager.fillReport(jasperReport, map, reportConnection);

我也在使用子报表,这就是为什么我没有使用JRResultSetDatasource并使用连接。我只是坚持这个说明,当我传递JRResultSetDatasource时,它工作正常,当我在HasMap参数中传递连接对象时,它会给出与上面相同的错误。

4 个答案:

答案 0 :(得分:9)

我刚刚在两分钟前将我的iReport jar文件更新到最后一个版本

答案 1 :(得分:4)

您项目中的jasper-designer和jar应该是相同的版本。

答案 2 :(得分:2)

项目lib文件夹中的Jar文件应该与iReport的版本匹配  我有同样的问题,它已通过使用正确的jar文件解决。  你可以看看下面的链接: http://sourceforge.net/projects/jasperreports/files/jasperreports/

答案 3 :(得分:1)

从旧的.jar替换为新的.jar没有问题。如果你有一个选择。假设您需要维护旧罐子,但它应该起作用。请用这个。

以下代码适用于较高版本[Ex:4.1.1],而不适用于旧版本[Ex:3.7.6]。

 <subreport>
       <reportElement positionType="Float" x="335" y="25" width="175"
                height="20" isRemoveLineWhenBlank="true"
                backcolor="#99ccff"/>

                <dataSourceExpression>
                new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource
                ($F{subReportBeanList})
                </dataSourceExpression>
                <subreportExpression class="java.lang.String">
                   <![CDATA[$P{SUBREPORT_DIR} + "subReport.jasper"]]>
                </subreportExpression>
   </subreport>

相同的代码适用于旧版本,只需稍加修改即可。

<parameter name="subreportParameter" class="net.sf.jasperreports.engine.JasperReport"/>
    <subreport>
       <reportElement  positionType="Float" x="1" y="2" width="532" height="15" isRemoveLineWhenBlank="true" backcolor="#99CCFF"/>
                    <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource
                ($F{subReportBeanList})]]></dataSourceExpression>
                    <subreportExpression class="net.sf.jasperreports.engine.JasperReport"><![CDATA[$P{subreportParameter}]]></subreportExpression>
                </subreport>