贾斯珀报告花了太长时间才开启

时间:2012-05-31 04:01:48

标签: java swing jasper-reports

我从面板的报告预览表单中调用此函数。

demo:主面板 - [调用] - ReportSelectionDialog(Frame) - [打开] Report(Frame)

问题是当我直接从MainPanel打开报告时

演示:主面板 - - 报告(框架)

JasperFillManager只需要一秒钟来填充报告,但是当我做第一个演示时,JasperFillManager需要20-30秒来填充报告。我检查了所需的参数(连接,参数图),并在打开ReportSelectionDialog时立即加载它们。我需要ReportSelectionDialog,但我不想等待这么长时间才打开报告。请帮忙。这是我加载报告的代码。是否有其他方式来填写报告。还有一种方法可以加载.jasper文件,而不是每次都编译报告吗?

private void openReport(){
    String reportFile = getFileName(reportList.getSelectedValue().toString());
    FileInputStream fs = null;

    try {
        fs = new FileInputStream(reportPath+reportFile);
        JasperDesign jasperDesign = JRXmlLoader.load(fs);
        JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, conn);
        javax.swing.JFrame jframe = new javax.swing.JFrame();
        jframe.setIconImage(Toolkit.getDefaultToolkit().getImage(this.getClass().getResource("/timsoftware/images/timlogo.png")));
        jframe.getContentPane().add(new JRViewer(jasperPrint));
        jframe.pack();
        jframe.setExtendedState(javax.swing.JFrame.MAXIMIZED_BOTH);
        jframe.setVisible(true);
    } catch (FileNotFoundException | JRException | HeadlessException e) {
        clsErrorHandler.printError(e.toString(), panelName, "PrintRecord");
    } finally {
        try {
            fs.close();
        } catch (IOException ex) {
            Logger.getLogger(ReportPreviewForm.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    this.dispose();
}

1 个答案:

答案 0 :(得分:1)

 JasperDesign jasperDesign = JRXmlLoader.load(fs);
 JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);

将这些行移出方法和初始化序列中的某个位置。可能是构造函数?它应该做的伎俩。问题是你在方法中一遍又一遍地编译报告,这是没有必要的。如果你只做一次初始化jasperReport就足够了。