一晩中詰まってもまだ問題点が見つからない.


最近、swtに埋め込まれたBrowserをカスタマイズしてデータをつかみ、仕事は基本的に完成しました.最後になると、一つの問題が午後中詰まって見当がつかなかった.
プロジェクト全体をTomcatの下に配置すると、異常が発生しました.
と書く
org.eclipse.swt.SWTError: Unable to load library (java.io.FileNotFound
Exception: GRE not found)
これはXULRunnerが発行した異常が見つからないことです.
しかし、私のxulrunnerはc:xulrunnerの下に置かれ、登録に成功し、Eclipseエンジニアリングの下で生成されたscriptを走って通過しました.
そこでWTPを使って私のWebエンジニアリングをデバッグし、デバッグプロセスは意外にもxulrunnerが見つかり、正常に動作しました.
そこでもう一度tomcatを起動し、Debugの時に配置した工事を走ってみたが、結局失敗した.
しかし、Eclipseの下のSeverでtomcatを起動すると、正常に動作します.
xulrunnerのpathが得られるかどうかを見るプログラムを書きました
 
import java.io.File;
import java.io.FileNotFoundException;

import org.mozilla.xpcom.GREVersionRange;
import org.mozilla.xpcom.Mozilla;

public class XulRunnerTest {
	public static void main(String[] args) {
		GREVersionRange[] range = new GREVersionRange[1];
		range[0] = new GREVersionRange("1.7.*", false, "1.8.*", true);
		try {
			File grePath = Mozilla.getGREPathWithProperties(range, null);
			System.out.println(grePath);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
}
 
結果xulrunnerのpath:c:xulrunnerを得ることに成功した
そこでサーブレット初期化時にこのコードを置いて、Eclipseの下のサーバでTomcatを起動しなくても成功するかどうかを見ます.
public void init() throws ServletException { 
		super.init();
		GREVersionRange[] range = new GREVersionRange[1];
		range[0] = new GREVersionRange("1.7.*", false, "1.8.*", true);
		try {
			File grePath = Mozilla.getGREPathWithProperties(range, null);
			logger.debug(grePath);
		} catch (FileNotFoundException e) {
			logger.debug(e.getMessage());
		}
	}

結果logで得る出力:GRE not found.
Eclipseの下のサーバでTomcatを起動するのと、通常のtomcatを起動する環境変数が異なるためですか?しかし、どのような変数が原因ですか?
 
最後にSFT FAQで見つけました:
と書く
Q: Can I specify which XULRunner installation gets used?
A: Typically a Mozilla-based Browser uses XULRunner's lookup mechanism to find a registered XULRunner at runtime. If you wish to override this mechanism you can set the value of java system property org.eclipse.swt.browser.XULRunnerPath to point at the target XULRunner's path. This property must be set before the first Browser instance is created.
Initメソッドに次を追加します.
System.setProperty("org.eclipse.swt.browser.XULRunnerPath", "C:\\xulrunner");

結果は何の効果もなく、logは出力:GRE not found.
最后にブログで発散するしかない...