エラーログの制御 で、エラーが発生したときのロギング、またそのログを表示するためのエラー・ログビューについて書きました。次はエラーをユーザに通知するエラーダイアログ機能を調べてみました。
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); <-ダイアログ表示処理
そうすると以下のようなエラーダイアログが表示されます。
更にこのダイアログには詳細ボタンがあり、それをクリックすると以下の画面が表示されます。
メイン部分の「マルチステータスのメッセージ」は、MultiStatusの第3引数の文字列、詳細部分のメッセージは、
MutliStatusクラスの例外クラスのメッセージ |--- MutliStatusのなかの1個目のStatusクラスの第3引数の文字列 |--- MutliStatusのなかの1個目のStatusクラスの例外クラスのメッセージ |--- MutliStatusのなかの2個目のStatusクラスの第3引数の文字列 |--- MutliStatusのなかの2個目のStatusクラスの例外クラスのメッセージ |--- ......
となります。
ErrorDialog.openError(shell, null, null, mStatus);
のnullの箇所に文字を設定することで、ちょっとですが表示を変更することができます。
また、もろもろのStatusクラスの引数のうち、例外クラスを受け取る箇所をnullにしてみると、こんな感じになります。
このやり方でやれば例外が発生していなくても、ユーザ通知に使うことができそうですね。例外を全て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);
そうするとこのようなダイアログが表示されました。
ErrorDialogってのが気になりますが、処理が完了しました、とか普通の通知にも使えそうです。
流れで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);
エラー画面はこんな感じ。
予想通りって感じですが、
IStatus status = new Status(IStatus.ERROR, SamplePlugin
.getPluginId(), IStatus.OK, "メッセージ1", null);
ErrorDialog.openError(shell, null, null, status);
というように例外を渡さないと、詳細ボタンと詳細を表示する領域は現れませんでした。
ただ、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はダメだって例外が発生しちゃいました。
この記事は
現在のアクセス:16741