eclipse のジョブ API を使用して大きなタスクをジョブとして実行しています。タスクが完了すると、ブール変数を true に設定し、その変数が true の場合、UI スレッドで WizardDialog を実行しています。私の現在のコードは次のようになります。
Job longRunningJob = new Job("Long running job...") {
@Override
protected IStatus run(IProgressMonitor monitor) {
boolean shouldShowDialog = doLongRunningJob();
if(shouldShowDialog) {
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
//Will open wizard dialog here
WizardDialog wizardDialog = new WizardDialog(Display.getCurrent().getActiveShell(), new TestWizard());
wizardDialog.setBlockOnOpen(true);
wizardDialog.open();
}
});
}
}
}
longRunningJob.setUser(true);
longRunningJob.schedule();
私の問題はrun
、信頼できる方法で実行されていない表示スレッド内にあります。つまり、実行メソッド内に入ることがありますが、そうでない場合があるため、run
メソッド内にブレークポイントを配置してテストしようとしましたが、同じことが起こります。
私の質問は、私がやっていることは正しい方法ですか? これは予想される動作ですか?では、このシナリオをどのように処理すればshouldShowDialog
よいですか。
編集:デバッグ中に観察した1つの動作は、ダイアログが表示されるが、突然閉じてしまうことです。スレッドを終了していると思います。