概要 †たとえば検索など、時間のかかる処理をするときはダイアログを出して進捗状況を表示するのが親切です。Eclipseにはこの機能が備わっていて、お手前通りに記述すれば割と簡単に実装可能です。やり方は
やってみる †具体的に見ると、以下のような感じです。 IWorkbench workbench = PlatformUI.getWorkbench(); IWorkbenchWindow window = workbench.getActiveWorkbenchWindow(); Shell shell = window.getShell(); // プログレスバーを使う ProgressMonitorDialog dialog = new ProgressMonitorDialog(shell); SearchWithProgress searchThread = new SearchWithProgress(text); try { dialog.run(true, true, searchThread); } catch (InvocationTargetException e) { logger.error(e); // 処理中に何らかの例外が発生したときの処理 } catch (InterruptedException e) { // キャンセルされたときの処理 logger.info("キャンセルされました"); logger.info(e); } ダイアログを作って、ビジネスロジックを作って、ダイアログ上でロジックを実行させる、という順番ですね。runメソッドでThrowされる例外は
となっています。 では実際にIRunnableWithProgress? を見てみると、 private class SearchWithProgress implements IRunnableWithProgress { public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { monitor.beginTask("「" + text + "」でGoogleを検索中...", 10); try { monitor.subTask("スペルチェック"); monitor.worked(1); なんか処理 monitor.worked(3); if (monitor.isCanceled()) { throw new InterruptedException("Cancel has been requested."); } monitor.subTask("検索中"); なんか処理 monitor.worked(3); //検索終了 if (monitor.isCanceled()) { throw new InterruptedException("Cancel has been requested."); } } catch (CoreException e) { throw new InvocationTargetException(e); } monitor.worked(10); 処理終わり monitor.done(); } } てな感じになっています。
なんか、アプリぽっくなってきました。 次はあこがれの(?)「バックグラウンドで実行」に挑戦かぁ? この記事は 現在のアクセス:6263 |