私は定期的に(5秒ごとに)子スレッドでいくつかの作業を行うEclipse RCPアプリを持っています。スレッドはメソッドを実行してアプリのステータス ラインを更新し、作業が完了したことを示します。次のようになります。
protected void updateStatusBar()
{
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findView(MainView.ID).
getViewSite().getActionBars().getStatusLineManager().setMessage("work finished");
}
});
}
それはうまくいきます。私が抱えている問題は、アプリを閉じると、時々このエラーで Null Pointer Exception が発生することです:
プラットフォームのシャットダウン後も実行中のジョブが見つかりました。ジョブはプラグインによってキャンセルする必要があります >シャットダウン中にジョブをスケジュールした: >org.eclipse.ui.internal.progress.TaskBarProgressManager$2
問題は、非同期実行のためにジョブが実行されていると同時に、アプリケーションが閉じているためにすべてが破壊されていることです。アプリが閉じられる前にジョブが終了していることを確認できるように、実行中の UI ジョブを取得/待機する方法はありますか?