|
エラーログの制御 で、エラーが発生したときのロギング、またそのログを表示するためのエラー・ログビューについて書きました。次はエラーをユーザに通知するエラーダイアログ機能を調べてみました。 エラーダイアログの制御方法について †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?ってのが気になりますが、処理が完了しました、とか普通の通知にも使えそうです。 普通の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);
エラー画面はこんな感じ。 例外を渡さないと、詳細ボタンは表示されない。 †予想通りって感じですが、 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はダメだって例外が発生しちゃいました。 この記事は 現在のアクセス:16503 |