ITPub博客

首页 > 应用开发 > IT综合 > jasperreport新版本增加的内置参数

jasperreport新版本增加的内置参数

原创 IT综合 作者:panpa 时间:2006-05-09 14:36:19 0 删除 编辑

这几天使用了新版本jasperreport升级原有的报表系统,使原有的应用代码引发出一个错误:

[java] java.lang.NullPointerException
[java] at java.util.Hashtable.put(Hashtable.java:393)
[java] at net.sf.jasperreports.engine.fill.JRFillDataset.setParameterValues(JRFillDataset.java:558)

本问题解决,使用JasperFillManager.fillReport方法中Map参数应该使用HashMap不能使用Hashtable

[@more@]

这几天使用了新版本jasperreport升级原有的报表系统,使原有的应用代码引发出一个错误:

[java] java.lang.NullPointerException
[java] at java.util.Hashtable.put(Hashtable.java:393)
[java] at net.sf.jasperreports.engine.fill.JRFillDataset.setParameterValues(JRFillDataset.java:558)
[java] at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:874)
[java] at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:689)
[java] at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:647)
[java] at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:63)
[java] at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:402)
[java] at net.sf.jasperreports.engine.JasperFillManager.fillReportToFile(JasperFillManager.java:188)
[java] at net.sf.jasperreports.engine.JasperFillManager.fillReportToFile(JasperFillManager.java:94)
......

追查发生空指针的代码为:

protected void setParameterValues(Map parameterValues) throws JRException
{
parameterValues.put(JRParameter.REPORT_PARAMETERS_MAP, parameterValues);

reportMaxCount = (Integer) parameterValues.get(JRParameter.REPORT_MAX_COUNT);

locale = (Locale) parameterValues.get(JRParameter.REPORT_LOCALE);
if (locale == null)
{
locale = Locale.getDefault();
parameterValues.put(JRParameter.REPORT_LOCALE, locale);
}

resourceBundle = (ResourceBundle) parameterValues.get(JRParameter.REPORT_RESOURCE_BUNDLE);
if (resourceBundle == null)
{
resourceBundle = loadResourceBundle();
parameterValues.put(JRParameter.REPORT_RESOURCE_BUNDLE, resourceBundle);//本行抛出空指针错误
}

parameterValues.put(JRParameter.REPORT_SCRIPTLET, scriptlet);

setFillParameterValues(parameterValues);

setDatasource();
}
郁闷,狂查为啥resourceBundle为空,无果,其默认值就是null

发现jasper里使用的parameterValues为java.util.HashMap类,而我的应用中传递的参数使用的是java.util.Hashtable类,由于jasperreport调用方法中使用的Map接口类型导致都可以使用,但是新版本中引入REPORT_RESOURCE_BUNDLE的参数无默认值,使得发生put空值,从而应用中不应该使用Hashtable,因为Hashtable不允许put空值;相反使用HashMap则不抛出错误。

所以本问题解决,将应用中的Hashtable统统改成HashMap。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/67736/viewspace-833767/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    20
  • 访问量
    56068