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