Java jasper报告空指针异常

问题描述:

我是新来的Java,我遇到了这个问题,我无法弄清楚。我继承了这个项目,我有下面的代码在我的小脚本之一:Java jasper报告空指针异常

DefaultLogger.logMessage("DEBUG path: "+ reportFile.getPath()); 
DefaultLogger.logMessage("DEBUG parameters: "+ parameters); 
DefaultLogger.logMessage("DEBUG jr: "+ jr); 
bytes = JasperRunManager.runReportToPdf(reportFile.getPath(), parameters, jr); 

而且我得到的结果如下(第四行存在FootwearReportsServlet.doGet线287):

DEBUG path: C:\Development\JavaWorkspaces\Workspace1\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\RSLDevelopmentStandard\reports\templates\footwear\RslFootwearReport.jasper 
DEBUG parameters: {[email protected]7af1, signature_path=images/logo_reports.jpg, submission_id=20070213154168780, [email protected]5795ce, logo_path=images/logos_3.gif, [email protected]2, test[email protected]1883d5f, signature_path2=images/logo_reports.jpg, [email protected], [email protected]504e0} 
DEBUG jr: [email protected]b6 
Apr 29, 2010 4:15:13 PM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet FootwearReportsServlet threw exception 
java.lang.NullPointerException 
    at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:89) 
    at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:601) 
    at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:517) 
    at net.sf.jasperreports.engine.JasperRunManager.runReportToPdf(JasperRunManager.java:385) 
    at com.rsl.reports.FootwearReportsServlet.doGet(FootwearReportsServlet.java:287) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
    at java.lang.Thread.run(Unknown Source) 

我无法弄清楚什么是空引用。从调试行我可以看到每个参数都有一个值。它是否指的是其中一幅图像的坏路径?有任何想法吗?出于某种原因,我的服务器无法在Eclipse中以调试模式启动,所以我无法解决这个问题。

+0

哪个JasperReports的版本是?查看该版本的确切源代码文件非常有用。 – doublep 2010-04-29 23:31:16

+0

最有可能是这样的:http://grepcode.com/file/repo1.maven.org/maven2/jasperreports/jasperreports/3.1.0/net/sf/jasperreports/engine/fill/JRFiller.java – MeBigFatGuy 2010-04-30 04:05:28

+0

你可以发布如何你正在创建数据源“jr”? – Gordon 2010-04-30 20:10:50

从看你在哪里得到的错误行:

jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:89) 

在它对应于

jasperPrint = filler.fill(parameters, dataSource); 

唯一的JRFiller源代码,可导致NullPointerException在这条线是当fillernull的情况。此时不检查参数null

查看createFiller(第134行)的代码,您可以轻松看到该函数返回空指针的条件。所以我想你忘了指定打印顺序(PRINT_ORDER_HORIZONTALPRINT_ORDER_VERTICAL)。

+0

优秀!我正在浏览API /文档以尝试找到设置打印顺序的方法... – Daniel 2011-02-18 22:47:10

我有同样的问题。

Roland Illig是对的,打印命令丢失。这可能是因为编译的报告文件缺少必填字段。

事后添加一个值到打印指令字段并没有帮助,它只是在下一个丢失另一个字段的位置崩溃。

使用相同版本的编译器(例如iReport)和您的运行时库。

+0

我遇到了同样的问题。刚注意到我用了不同的版本来编译和运行。让他们同样解决了我的问题。谢谢 ! – bkrish 2015-07-30 18:56:41

删除所有系列和类别的订单。 它将删除此异常。