我使用DynamicReports库为我的应用制作报告。创建报告需要一些时间,我决定在未创建报告时创建自定义进度栏。代码示例后的问题。

进度条类:

public class ProgressDialog implements DialogWrapper{

    private JFrame iFrame;
    private JDialog iDialog;
    private JPanel pane;
    private final JProgressBar aJProgressBar = new JProgressBar(0, 100);

    public ProgressDialog(){
        onCreate();
    }

    @Override
    public void onCreate() {
        iFrame = new JFrame("Создание отчета");
        iDialog = new JDialog(iFrame, true);
        pane = new JPanel();
        aJProgressBar.setIndeterminate(true);
        pane.add(aJProgressBar, BorderLayout.NORTH);
        iDialog.add(pane, BorderLayout.CENTER);
        iDialog.setTitle("Создание отчета");
        iDialog.setSize(300, 150);
        iDialog.setResizable(false);
        iDialog.setVisible(true);
        return;
    }

    @Override
    public void fillData() {}

    @Override
    public void onSubmit() {}

    protected void onCancel(){
        iDialog.setVisible(false);
        iDialog.dispose();
    }

    public void cancel(){
        onCancel();
    }
 }


报告摘要类

public abstract class AbstractReportMain<T extends ReportDesign<U>, U extends ReportData> {
private ProgressDialog pd;

public AbstractReportMain() {
    pd = new ProgressDialog();
    build();
}

protected void build() {
    try {
        JasperReportBuilder reportBuilder = DynamicReports.report();
        U data = getReportData();
        if (data != null) {
            reportBuilder.setDataSource(data.createDataSource());
        }
        getReportDesign().configureReport(reportBuilder, data);

        pd.cancel();
        reportBuilder.show(false);
    } catch (DRException e) {
        e.printStackTrace();
    }
}

protected U getReportData() {
    return null;
}

protected abstract T getReportDesign();
}


问题:当我创建ProgressDialog时,我不关闭对话框时程序流停止。为什么会发生,这种行为如何调用以及我在哪里可以读到它?它如何使用和它对我有用。谢谢。

最佳答案

我相信您的问题是您没有为进度对话框创建新线程。这是一个可以帮助您的示例。 Modal Progress Dialog example

07-28 02:23
查看更多