アクティブ・ヘルプ・デバッグのヒント

アクティブ・ヘルプ・リンクを起動したコードとマークアップは、非常に簡単に見えます。  しかし、アクティブ・ヘルプ・リンクが機能していないと考えられる場合は、どうすればよいでしょうか?

アクションの事前テスト

アクション・インプリメンテーションが複雑である場合、いくつかのテスト・コードを使用して Eclipse の内部でアクションを起動する必要があります。  これで、アクションを JavaScript から起動する前にエラーを除去できます。 

JavaScript の実行確認

"plugins/org.eclipse.help_2.1.0/liveHelp.js" を変更して、liveAction 関数の最初のステートメントとして alert 関数の呼び出しを組み込むことができます。

function liveAction(pluginId, className, argument)
{
	alert("liveAction called");
	...

alert 関数はブラウザーに警告ダイアログを開きます。 これは、HTML で liveAction が正常に起動されたかどうかの検査に使用できます。  ヘルプ・リンクをクリックしても警告ダイアログが表示されない場合、HTML マークアップに問題があります。

アクティブ・ヘルプ・アクションのデバッグ

JavaScript の実行を確認したら、アクションを Eclipse の内部からデバッグすることができます。  これを行うため、ヘルプ・アクション・クラスにブレークポイントを設定して、自己ホスト Eclipse インスタンスを始動することができます。  ヘルプ HTML の JavaScript はブラウザーを起動した Eclipse ヘルプ・サーバー上のサーブレットを呼び出すため、ホスト・インスタンスではなく、 新たに起動した Eclipse インスタンスのヘルプ・ブラウザーでアクティブ・ヘルプをテストしなければなりません。

ブレークポイントをセットアップして、アクティブ・ヘルプ・リンクをクリックしても何も起きない場合、 プラグインおよびアクティブ・ヘルプ・クラスが JavaScript 内に正しく指定されていない可能性があります。 

アクションをブレークポイントで停止することができれば、アクションを他の Java コードと同様にデバッグできます。

UI コードが Display.syncExec にラップされていることを確認

実行時によくある問題として、アクティブ・ヘルプを起動するスレッドから UI コードへの不完全なアクセスが挙げられます。  ライブ・ヘルプ・アクションが、元は UI スレッドで実行されていたコードを元にしている場合、 これが非 UI スレッドから実行されているという事実に対処するため、変更を加えなければなりません。 

	public void run() {
		// Active help does not run on the UI thread, so we must use syncExec
		Display.getDefault().syncExec(new Runnable() {
							public void run() {
								//do the UI work in here;
							}
		});		
	}

Copyright IBM Corporation and others 2000, 2003.