0

パネルのレポート プレビュー フォームからこの関数を呼び出しています。

デモ : メイン パネル - [呼び出す] - ReportSelectionDialog(Frame) - [開く] Report(Frame)

問題は、MainPanel から直接レポートを開くときです。

demo : メインパネル - - レポート(フレーム)

JasperFillManager はレポートを埋めるのに 1 秒ほどしかかかりませんが、最初のデモを行ったとき、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();
}
4

1 に答える 1

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

これらの行をメソッドの外に移動し、初期化シーケンスのどこかに移動します。コンストラクターかもしれませんか?そして、それはトリックを行う必要があります。問題は、メソッドでレポートを何度もコンパイルしていることです。これは必要ありません。初期化するために一度実行すればjasperReport十分です。

于 2012-05-31T06:03:27.620 に答える