エラーログの制御 で、エラーが発生したときのロギング、またそのログを表示するためのエラー・ログビューについて書きました。次はエラーをユーザに通知するエラーダイアログ機能を調べてみました。
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はダメだって例外が発生しちゃいました。
この記事は
現在のアクセス:15975