1
私はDynamicReports
ライブラリを使用して、自分のアプリケーションのレポートを作成します。レポートの作成にはしばらく時間がかかり、レポートが作成されていない間はカスタム進行状況バーを作成することにしました。コード例の後の質問。DynamicReportsとprogressbarの例のJavaプログラムフロー
プログレスバークラス:
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を作成するときに、私は近くに対話をしませんが、プログラムの流れが停止します。それがなぜ起こったのですか、この行動がどのように呼び出され、どこでそれについて読むことができるのですか?どのようにそれを使用して、それは私のために動作します。ありがとう。
はい新しいスレッドが問題を解決します。しかし、アプリケーションの流れがダイアログウィンドウに残っているのは正常ですか?私はこれに驚いた。私はJavaのuiライブラリで新しいです。 – Mrusful
基本的にモーダルダイアログはスレッドが閉じられるまでブロックします。 [Swing Worker](http://java.sun.com/products/jfc/tsc/articles/threads/threads2.html)を使用して、バックグラウンドタスクを実行することもできます。 – Clay3981
'Modal Progress Dialog example'を使うJDialogはコンポーネントを使う代わりに白いキャンバスを持っています。 'Swing'の明確な特徴もありません。 – Mrusful