2012-05-31 2 views
0

Я вызываю эту функцию из формы предварительного просмотра отчета панели.Отчет Jasper слишком долго открывается

демо: Main Panel - [который называет] - ReportSelectionDialog (Frame) - [который открывает] Отчет (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(); 
} 
+0

В большинстве случаев для открытия требуется менее 30-40 секунд. Поэтому я не думаю, что мы можем быстро загрузить его, поскольку у него есть данные для обработки и обновления их в отчете. – Addicted

ответ

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

Переместить эти строки из метода и где-то в вашей последовательности инициализации. Может быть конструктором? И это должно сделать трюк. Проблема в том, что вы компилируете отчет снова и снова в методе, что необязательно. Если вы это сделаете один раз, чтобы инициализировать jasperReport, этого достаточно.

Смежные вопросы