私は動作中の ProgressMonitorDialog を持っていますが、正しく設定していることを確認したいと思います。
最初のコード:
ダイアログの作成方法
public void startProgressBar() {
try {
new ProgressMonitorDialog(getShell()).run(true, true,
new ProgressBarThread());
}
catch (InvocationTargetException e) {
MessageDialog.openError(getShell(), "Error", e.getMessage());
}
catch (InterruptedException e) {
MessageDialog.openInformation(getShell(), "Cancelled", e.getMessage());
}
}
クラスファイル
class ProgressBarThread implements IRunnableWithProgress {
private static final int TOTAL_TIME = 1000;
public ProgressBarThread() {
}
public void run(IProgressMonitor monitor) throws InvocationTargetException,InterruptedException {
monitor.beginTask("Creating PDF File(s): Please wait.....", IProgressMonitor.UNKNOWN);
for (int total = 0; total < TOTAL_TIME ; total++) {
Thread.sleep(total);
monitor.worked(total);
if (total == TOTAL_TIME / 2) monitor.subTask("Please be patient... Operation should finish soon.");
}
monitor.done();
}
}
ProgressBar を呼び出して Pdf ファイル作成操作を実行するメソッド
private void startSavePdfOperation() {
Display.getDefault().asyncExec(new Runnable() {
public void run() {
startProgressBar();
}
});
saveOp = new AplotSaveOperation(appReg.getString("aplot.message.SAVETOPDF"), "PDF", session);
saveOp.addOperationListener(new MyOperationListener(this) {
public void endOperationImpl() {
java.io.File zipFile = null;
try {
AplotSaveResultsParser.SaveResult saveResults = saveOp.getSaveResults();
if (saveResults != null) {
ETC..... ETC......
質問:
ProgressMonitorDialog は GUI であるため、Display.getDefault().asyncExec で実行する必要がありますか?
ProgressMonitorDialog が別のスレッドで実行されている場合、操作が終了したときに閉じることをどのように認識しますか?
プログレスバーと操作の間に関係はありますか?
ProgressBarThread クラスの for ループは、基本的にモニターを開いたままにするタイマーであると想定するのは正しいですか?
ProgressMonitorDialog のインジケーターの速度を上げる方法はありますか? また、キャンセル ボタンを削除できますか?
これが現在起こっていると私が考えていることです。
PDF Operation Listener を開始する直前に進行状況バーを開始しています 上記のstartSavePdfOperation() を参照してください
進行状況バーは不明として実行されていますが、操作がバックグラウンドのスレッドで実行されている間、for ループを使用して進行状況バー ダイアログを開いたままにします。
上記のクラス ProgressBarThread を参照してくださいPDF 操作が完了すると、リスナー操作クラスは基本 GUI ダイアログを閉じます。
public void endOperation() { try { endOperationImpl(); } finally { Display.getDefault().asyncExec(new Runnable() { public void run() { w.getShell().setCursor(new Cursor(Display.getCurrent(), SWT.CURSOR_ARROW)); w.recursiveSetEnabled(getShell(), true); w.getShell().setEnabled(!getShell().getEnabled()); w.close(); } }); }
}
ProgressBarThread モニターに何が起こっているのかわかりませんか?
これは可能ですか?
PDF 操作が開始されると、ProgressMonitorDialog が開き、インジケーターが開始されます。不明のままでOK。
PDF 操作が完了すると、モニターが閉じ、ベース ダイアログ
リクエストがバックグラウンドで動作していることをユーザーに通知するプログレスバーダイアログを開きたいだけです。
前述のように、上記のコードは機能しますが、ベース GUI を閉じてプログレス スレッドを破棄し、モニターを実行することはお勧めできません。