// 下階層用テンプレート #topicpath ---- //ここにコンテンツを記述します。 [[エラーログの制御>Eclipse/プラグイン開発のTIPS集/エラーログの制御]] で、エラーが発生したときのロギング、またそのログを表示するためのエラー・ログビューについて書きました。次はエラーをユーザに通知するエラーダイアログ機能を調べてみました。 #contents **エラーダイアログの制御方法について [#f9f575af] EclipseはStatusオブジェクトを使用したエラーダイアログ表示機能があります。エラーダイアログは、 org.eclipse.jface.dialogs.ErrorDialog というクラスを用います。 やり方は簡単で、[[エラーログの制御>Eclipse/プラグイン開発のTIPS集/エラーログの制御]]で出てきた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); <-ダイアログ表示処理 そうすると以下のようなエラーダイアログが表示されます。 #ref(error01.png) 更にこのダイアログには詳細ボタンがあり、それをクリックすると以下の画面が表示されます。 #ref(error02.png) メイン部分の「マルチステータスのメッセージ」は、MultiStatusの第3引数の文字列、詳細部分のメッセージは、 MutliStatusクラスの例外クラスのメッセージ |--- MutliStatusのなかの1個目のStatusクラスの第3引数の文字列 |--- MutliStatusのなかの1個目のStatusクラスの例外クラスのメッセージ |--- MutliStatusのなかの2個目のStatusクラスの第3引数の文字列 |--- MutliStatusのなかの2個目のStatusクラスの例外クラスのメッセージ |--- ...... となります。 **タイトルの文言を変えるなど、ちょっとしたカスタマイズ [#raa96b61] ErrorDialog.openError(shell, null, null, mStatus); のnullの箇所に文字を設定することで、ちょっとですが表示を変更することができます。 #ref(error03.png) また、もろもろのStatusクラスの引数のうち、例外クラスを受け取る箇所をnullにしてみると、こんな感じになります。 #ref(error04.png) **普通のユーザ通知にも使う。 [#d178f4bb] このやり方でやれば例外が発生していなくても、ユーザ通知に使うことができそうですね。例外を全て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); そうするとこのようなダイアログが表示されました。 #ref(info.png) ErrorDialogってのが気になりますが、処理が完了しました、とか普通の通知にも使えそうです。 **普通のStatusの場合も [#c0f626f4] 流れで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); エラー画面はこんな感じ。 #ref(errorStatus.png) ***例外を渡さないと、詳細ボタンは表示されない。 [#m80191f9] 予想通りって感じですが、 IStatus status = new Status(IStatus.ERROR, SamplePlugin .getPluginId(), IStatus.OK, "メッセージ1", null); ErrorDialog.openError(shell, null, null, status); というように例外を渡さないと、詳細ボタンと詳細を表示する領域は現れませんでした。 #ref(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はダメだって例外が発生しちゃいました。 ---- この記事は #vote(おもしろかった[3],そうでもない[0]) #comment #topicpath SIZE(10){現在のアクセス:&counter;}