поток Java-программ на примере DynamicReports и прогрессбар - PullRequest
1 голос
/ 08 марта 2012

Я использую библиотеку 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, выполнение программы останавливается, пока я не закрываю диалог. Почему так происходит, как называется это поведение и где я могу прочитать об этом? Как это использовать и как это работает для меня. Благодаря.

1 Ответ

2 голосов
/ 08 марта 2012

Я считаю, что ваша проблема в том, что вы не создаете новую ветку для своего диалога прогресса. Вот пример, который поможет вам. Пример диалога модального прогресса

...