// 下階層用テンプレート #topicpath ---- //ここにコンテンツを記述します。 Eclipseにはエラー情報を表示するエラー・ログビューがありますが、そのビューの使い方です。 #contents #ref(error.png) エラー・ログビュー ~ #ref(detail.png) その詳細画面 **エラーログについて [#i27db08d] ***使い方 [#m6e1e7cf] このビューにエラー内容を表示するには以下の記述をすればよいようです。 IStatus status = new Status(IStatus.ERROR, SamplePlugin .getPluginId(), IStatus.OK, "メッセージ", new Exception("エラーメッセージ")); SamplePlugin.getDefault().getLog().log(status); 2行目のlogメソッドが呼ばれたときに、与えられたstatus(IStatusの実装クラス)オブジェクトの内容をログに出力します。Statusオブジェクトはエラーなどの状況を格納したクラスです。コンストラクタの引数の意味は以下の通り。 /** * Creates a new status object. The created status has no children. * * @param severity the severity; one of <code>OK</code>, <code>ERROR</code>, * <code>INFO</code>, <code>WARNING</code>, or <code>CANCEL</code> * @param pluginId the unique identifier of the relevant plug-in * @param code the plug-in-specific status code, or <code>OK</code> * @param message a human-readable message, localized to the * current locale * @param exception a low-level exception, or <code>null</code> if not * applicable */ public Status(int severity, String pluginId, int code, String message, Throwable exception) さて、エラー・ログビューは重要度やメッセージなどの項目がありますが、各項目はStatusオブジェクトの値に対応してるみたいです。具体的には以下のような対応になっています。 -重要度:Statusの第1引数。上の例だとIStatus.ERROR -メッセージ:Statusの第4引数。上の例だと"メッセージ" -プラグイン:Statusの第2引数。上の例だとSamplePlugin.getPluginId() -日付:ログ出力をした日付。 -例外スタック・トレース:Statusの第5引数のstackTrace。上の例だとnew Exception("エラーメッセージ")のstackTraceです。 -セッション・データ:??よくわかんなかったです。 このようにログに出力したい内容をStatusに格納してあげればよいわけですね。 ***MultiStatusを使う [#p93fc9a7] MultiStatusとは、複数のエラーを同時に扱う場合に使用するStatusの拡張クラスです。このクラスは内部に複数のStatusクラスを格納することができます。具体的なコードは以下の通り。 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); SamplePlugin.getDefault().getLog().log(mStatus); この出力結果は以下のようになります。 #ref(multi.png) *さらに、ダイアログの制御 [#h2d968b6] **エラーダイアログの制御方法について [#f9f575af] EclipseはStatusオブジェクトを使用したエラーダイアログ表示機能があります。エラーダイアログは、 org.eclipse.jface.dialogs.ErrorDialog というクラスを用います。 上でやったようにMultiStatusのオブジェクトがあったとき、 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の例外メッセージ |--- なかの1個目のStatusクラスの第3引数の文字列 |--- なかの1個目のStatusクラスの例外クラスのメッセージ |--- なかの2個目のStatusクラスの第3引数の文字列 |--- なかの2個目のStatusクラスの例外クラスのメッセージ |--- ...... となります。 **タイトルの文言を変えるなど、ちょっとしたカスタマイズ [#raa96b61] ErrorDialog.openError(shell, null, null, mStatus); のnullの箇所に文字を設定することで、ちょっとですが表示を変更することができます。 #ref(error03.png) また、もろもろのStatusクラスの引数のうち、例外クラスを受け取る箇所をnullにしてみると、こんな感じになります。 #ref(error04.png) ---- この記事は #vote(おもしろかった,そうでもない) #comment #topicpath SIZE(10){現在のアクセス:&counter;}