【问题标题】:jasper report showing nothing and getting error NullPointer Error on Netbeansjasper 报告没有显示任何内容并在 Netbeans 中出现错误 Null Pointer Error
【发布时间】:2013-10-02 03:31:31
【问题描述】:

report.java

     byte[] pdfbyte = null;
        try {
            dbcon connect = new dbcon();
            ServletContext context = this.getServletConfig().getServletContext();
            String compiledFileName = context.getRealPath("/jasper/report3.jasper");
            System.out.print(compiledFileName);
            // String var = request.getParameter("var").toString();
            //String res = JOptionPane.showInputDialog(null, "What is your name?", "Enter your name",JOptionPane.QUESTION_MESSAGE);

            File reportFile = new File(compiledFileName);
            HashMap parameters = new HashMap();
//            // parameters.put("itemName", var);
            parameters.put("ReportTitle", "MyReport");
//            parameters.put("BaseDir", reportFile.getParentFile());
//            parameters.put("EmpNo", 32504);
            JasperPrint jasperPrint = null;
            Connection conn = connect.dbstate().getConnection();
            try {

                try {
                    jasperPrint = JasperFillManager.fillReport(compiledFileName, parameters, conn);
                    pdfbyte = JasperExportManager.exportReportToPdf(jasperPrint);
                } catch (Exception e) {
                    System.out.print("E" + e);
                }
            } catch (Exception ex) {
                System.out.println("*** Could not create compiled jasper file: " + ex.getMessage());
            } finally {
                try {
                    connect.dbstate().close();
                } catch (SQLException ex) {
                    System.out.println("could not close  databse after filling the report ");
                }
            }
            ServletOutputStream outstream = response.getOutputStream();

            response.setContentType("application/pdf");
            response.setContentLength(pdfbyte.length);
            response.setHeader("Content-disposition", "inline; filename=\"Report.pdf\"");
            outstream.write(pdfbyte);
        } catch (Exception e) {
            System.out.print(e);
            e.printStackTrace();
        }

图书馆

我在 Netbeans 上遇到以下错误

SEVERE: A web application registered the JBDC driver [oracle.jdbc.OracleDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
Ejava.lang.NullPointerExceptionjava.lang.NullPointerExceptionjava.lang.NullPointerException
        at jasper.Report.processRequest(Report.java:63)
        at jasper.Report.doGet(Report.java:75)
        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.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        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.Http11AprProcessor.process(Http11AprProcessor.java:859)
        at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
        at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555)
        at java.lang.Thread.run(Thread.java:619)

【问题讨论】:

  • 报告是在pdfFilePath 生成的吗? - 另外,就我个人而言,我会避免在运行时编译报告,因为这是一个相当缓慢的过程,您应该能够预编译然后简单地使用输出来填充报告...
  • 是的..我想下载/生成报告到服务器文件夹jasperReport,同时报告应该显示在浏览器上。
  • 您可以将报告输出为 HTML 并将结果提供给服务器。否则,您应该尝试提供链接...我想,自从我尝试过类似的事情以来已经有一段时间了;)
  • @MadProgrammer 感谢您的建议,但您能否分享其中的部分代码。

标签: java servlets jasper-reports pdf-generation


【解决方案1】:

我建议您像 @MadProgrammer 所说的那样预编译您的报告。要将报告从 servlet 发送到客户端(webbrowser 上的 previwe 或直接下载),我使用这个:

...
// trying get the report
        try {

        // getting de real path
        String reportPath = FacesContext.getCurrentInstance().getExternalContext().getRealPath(reportFileName);

        //
        HttpServletResponse httpServletResponse = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();

        // here you can specify the condition to print, if conditionVoolean is true it will do a direct download
        if (conditionBoolean) {
            fileName = "your file name to direct download";
            httpServletResponse.addHeader("Content-disposition", "attachment; filename=" + fileName +".pdf");
        }

        // 
        byte[] bytes;

        // get the filled report in bytes
        bytes = JasperRunManager.runReportToPdf(jasperReport, parameter, conn);

        if (bytes != null && bytes.length > 0) {

            // specifying the type of file/content to browser
            httpServletResponse.setContentType("application/pdf");

            httpServletResponse.setContentLength(bytes.length);

            ServletOutputStream ouputStream = httpServletResponse.getOutputStream();

            ouputStream.write(bytes, 0, bytes.length);

            ouputStream.flush();

            // closing the stream line
            ouputStream.close();
        }
        FacesContext.getCurrentInstance().responseComplete();
    }
    catch (JRException ex) {
        ex.printStackTrace();
    }
    catch (IOException ex) {
        ex.printStackTrace();
    }
...

Att:对不起葡萄牙的 cmets。这是我的母语。

希望对你有帮助^^

【讨论】:

  • 您的解决方案没有帮助。我仍然得到黑屏。没有生成 pdf。
  • 好的,让我们尝试解决这个问题。异常继续存在吗?并且,如果您的结果集为空,它将显示一个空白报告。确认你的查询兄弟?
  • 谢谢兄弟,我检查了所有,昨天谷歌搜索,发现实际问题。这是因为,我使用的是一些旧版本的库。我下载了最新的它工作!所以,我猜我的代码是正确的。
【解决方案2】:

代码没有任何问题,我将所有库更改为最新更新的库,例如 jasperreport-4.5.1.jarjasperreport-5.1.0.jar 并且它有效!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多