Top / Eclipse / プラグイン開発のTIPS集 / エラーダイアログの制御

エラーログの制御 で、エラーが発生したときのロギング、またそのログを表示するためのエラー・ログビューについて書きました。次はエラーをユーザに通知するエラーダイアログ機能を調べてみました。

エラーダイアログの制御方法について

EclipseはStatusオブジェクトを使用したエラーダイアログ表示機能があります。エラーダイアログは、

org.eclipse.jface.dialogs.ErrorDialog

というクラスを用います。

やり方は簡単で、エラーログの制御で出てきたMultiStatus?のオブジェクトを使って、以下のようにErrorDialog?#openError を呼び出します。

MultiStatus mStatus = new MultiStatus(SamplePlugin
        .getPluginId(), IStatus.OK, "マルチステータスのメッセージ",
        new Exception("マルチのエラーメッセージ"));
IStatus status = new Status(IStatus.ERROR, SamplePlugin
        .getPluginId(), IStatus.OK, "メッセージ1", new Exception(
        "エラーメッセージ1"));
mStatus.add(status);
status = new Status(IStatus.INFO, SamplePlugin.getPluginId(),
        IStatus.OK, "メッセージ2", new Exception("エラーメッセージ2"));
mStatus.add(status);
Shell shell = getSite().getWorkbenchWindow().getShell();
ErrorDialog.openError(shell, null, null, mStatus);  <-ダイアログ表示処理

そうすると以下のようなエラーダイアログが表示されます。

error01.png

更にこのダイアログには詳細ボタンがあり、それをクリックすると以下の画面が表示されます。

error02.png

メイン部分の「マルチステータスのメッセージ」は、MultiStatus?の第3引数の文字列、詳細部分のメッセージは、

MutliStatusクラスの例外クラスのメッセージ
 |--- MutliStatusのなかの1個目のStatusクラスの第3引数の文字列
 |--- MutliStatusのなかの1個目のStatusクラスの例外クラスのメッセージ
 |--- MutliStatusのなかの2個目のStatusクラスの第3引数の文字列
 |--- MutliStatusのなかの2個目のStatusクラスの例外クラスのメッセージ
 |--- ......

となります。

タイトルの文言を変えるなど、ちょっとしたカスタマイズ

ErrorDialog.openError(shell, null, null, mStatus);

のnullの箇所に文字を設定することで、ちょっとですが表示を変更することができます。

error03.png

また、もろもろのStatusクラスの引数のうち、例外クラスを受け取る箇所をnullにしてみると、こんな感じになります。

error04.png

普通のユーザ通知にも使う。

このやり方でやれば例外が発生していなくても、ユーザ通知に使うことができそうですね。例外を全てnullにして、MultuStatus?内のStatusもERRORでなくて全てINFOとしてみます。コーディングは以下の感じですね。

MultiStatus mStatus = new MultiStatus(SamplePlugin
        .getPluginId(), IStatus.OK, "マルチステータスのメッセージ", null);
IStatus status = new Status(IStatus.INFO, SamplePlugin
        .getPluginId(), IStatus.OK, "メッセージ1", null);
mStatus.add(status);
status = new Status(IStatus.INFO, SamplePlugin.getPluginId(),
        IStatus.OK, "メッセージ2", null);
mStatus.add(status);
Shell shell = getSite().getWorkbenchWindow().getShell();
ErrorDialog.openError(shell, "完了しました", "処理が完了しました。", mStatus);

そうするとこのようなダイアログが表示されました。

info.png

ErrorDialog?ってのが気になりますが、処理が完了しました、とか普通の通知にも使えそうです。

普通のStatusの場合も

流れでMultiStatus?を先にやりましたが、普通のStatusの場合ももちろん使えます。

IStatus status = new Status(IStatus.ERROR, SamplePlugin
        .getPluginId(), IStatus.OK, "メッセージ1", new Exception(
        "エラーメッセージ1"));
Shell shell = getSite().getWorkbenchWindow().getShell();
ErrorDialog.openError(shell, null, null, status);

エラー画面はこんな感じ。

errorStatus.png

例外を渡さないと、詳細ボタンは表示されない。

予想通りって感じですが、

IStatus status = new Status(IStatus.ERROR, SamplePlugin
        .getPluginId(), IStatus.OK, "メッセージ1", null);
ErrorDialog.openError(shell, null, null, status);

というように例外を渡さないと、詳細ボタンと詳細を表示する領域は現れませんでした。

noDetail.png

ただ、MultiStatus?を使用した場合はどうしても詳細領域がでちゃいますね。ダメ元で

MultiStatus mStatus = new MultiStatus(SamplePlugin
        .getPluginId(), IStatus.OK, "マルチステータスのメッセージ", null);
IStatus status = new Status(IStatus.ERROR, SamplePlugin
        .getPluginId(), IStatus.OK, null, null);
mStatus.add(status);

とかやったら、nullはダメだって例外が発生しちゃいました。


この記事は

選択肢 投票
おもしろかった 15  
そうでもない 1  

Top / Eclipse / プラグイン開発のTIPS集 / エラーダイアログの制御

現在のアクセス:14294


添付ファイル: filenoDetail.png 622件 [詳細] fileerrorStatus.png 617件 [詳細] fileinfo.png 577件 [詳細] fileerror04.png 609件 [詳細] fileerror03.png 654件 [詳細] fileerror02.png 681件 [詳細] fileerror01.png 675件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-09-03 (日) 20:19:04 (806d)