#topicpath
----
**概要 [#t205e575]
プログレスバーを用いることで、進捗状況を表示したり、ユーザにキャンセルさせたりすることができるようになりました。しかし、このGUIの難点は処理が長いときは結局待たされてしまうということです。Eclipse2系の時は、仕事で使ってるとビルドで一時間以上Eclipseを占有されてしまうこともザラでした。

さて、Eclipse3.0からはそのような事象に対応すべく「バックグラウンドで実行」する機能があります。Eclipse3.0からはこの機能が随所で使用されていて、ビルドなどの処理中もEclipseを並行して使用することができるようになりました。

プラグインを自分で開発するときも、この機能を用いれば飛躍的にアプリの使い勝手がアップしそうです。が、ネットではほとんど情報を見つけることができませんでした。かろうじて
-[[On the Job: The Eclipse Jobs API:http://www.eclipse.org/articles/Article-Concurrency/jobs-api.html]]

があるくらいです。

***やってみる [#n09016ee]
とりあえずいろいろ試してみました。基本的に、プログレスモニタとあんま変わらないかなあとあたりをつけて。。。。気にしなくちゃいけないポイントとしては、バックグラウンドで実行できちゃう(=ユーザがEclipseをさわってなんかやっちゃうかもしれない)ので、スレッドを意識しなくちゃいけないこと、くらい???

やらなくちゃいけないことは
-org.eclipse.jface.operation.IRunnableWithProgress のかわりにorg.eclipse.core.runtime.jobs.Jobを実装する
-Job.schedule();を実行

みたいですね。

JobクラスでOverrideしなくてはいけないメソッドは
 public IStatus run(IProgressMonitor monitor) {
です。

 public IStatus run(IProgressMonitor monitor) {
   monitor.beginTask("「" + text + "」でGoogleを検索中...", 10);
   try {
     //スペルチェック開始
     monitor.subTask("スペルチェック");
     monitor.worked(1);
     なんか処理
     monitor.worked(3);
     //スペルチェック終了
     if (monitor.isCanceled()) {
         return Status.CANCEL_STATUS;
     }
     //検索開始
     monitor.subTask("検索中");
     なんか処理
     monitor.worked(3);
     //検索終了
   } catch (CoreException e) {
       return e.getStatus();
   }
   monitor.worked(10);
   monitor.done();
   
   return Status.OK_STATUS;
 }



----
この記事は
#vote(おもしろかった,そうでもない)

#comment
#topicpath


SIZE(10){現在のアクセス:&counter;}

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS