2011/06/11
Eclipse/SWTのBrowserではまった。
EclipseでGUIを作る場合、どんなのが適当かなーと
思ってたら SWT からブラウザが起動できるらしいので
試して見たがえらくはまった。
SWTから起動したブラウザはイベントをJavaで拾えるので
ローカルアプリとの連係ができる。
通常のブラウザはセキュリティ上の制限が厳しくWebアプリと ローカルアプリを連係させるのは難しかったが これで簡単にできるかもしれない。 SWT の開発環境は以前はデフォルトで入っていたらしいのだが 最近の版では別途インストールが必要らしい。 しかもプラットフォーム毎に異なるバイナリが使う必要がある。 以下のURLから使っているEclipseと同じ版の「SWT Binary and Source」 を落してきてインストールする。org.eclipse.swt.SWTError: No more handles [Unknown Mozilla path (MOZILLA_FIVE_HOME not set)]
ググった情報を元に eclipse の起動スクリプトに設定を追加してみた。
export MOZILLA_FIVE_HOME=/usr/local/lib/firefox3
export LD_LIBRARY_PATH=$MOZILLA_FIVE_HOME:$LD_LIBRARY_PATH
しかし別のエラーが...
UnsatisfiedLinkError: no swt-mozilla-gtk-3555 or swt-mozilla-gtk in swt.library.path, java.library.path or the jar file
しかし、 swt-develでインストールされるライブラリはこれだけだ。
libswt-atk-gtk-3631.so
libswt-awt-gtk-3631.so
libswt-cairo-gtk-3631.so
libswt-glx-gtk-3631.so
libswt-gnome-gtk-3631.so
libswt-gtk-3631.so
libswt-pi-gtk-3631.so
libswt-xulrunner-gtk-3631.so
本来なら libswt-xulrunner-gtk-3631.so が使われるべきと
思うのだがググっても良く分からない。
探し回ったらこんな所に居やがったのだが明らかに旧版。
~/eclipse/org.eclipse.platform_3.4.0_185596441/configuration/org.eclipse.osgi/bundles/129/1/.cp/libswt-mozilla-gtk-3452.so
バージョンの混乱が起こっているようなのだが原因がわからないので
SWT のソースを読みまくってやっと状況が見えてきた。
最初に libswt-xulrunner-gtk の使える環境か否か調べて
だめなら libswt-mozilla-gtk を使うようになっていた。
で、ソースをさらに読むとシステムプロパティに
org.eclipse.swt.browser.XULRunnerPath
が設定されていないと xulrunner を使わないようになっている事が判明。
実行環境に設定したら動いたよ。
-Dorg.eclipse.swt.browser.XULRunnerPath=/usr/local/lib/firefox3
言及しているサイトはあんまり無いけどFirefoxのみの設定だからか?
あちこちにあるサンプルだけど一応置いとく。
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.*;
public class BrowserTest {
public static void main(String[] args) {
Display display = new Display();
final Shell shell = new Shell(display);
shell.setText("BrowserTest");
shell.setLayout(new FillLayout());
Browser browser = new Browser(shell, SWT.NONE);
browser.setUrl("http://www.yahoo.co.jp");
shell.setSize(800, 600);
shell.open();
while (!shell.isDisposed ()){
if (!display.readAndDispatch ()){
display.sleep ();
}
}
shell.dispose();
display.dispose();
}
}
実行結果:
通常のブラウザはセキュリティ上の制限が厳しくWebアプリと ローカルアプリを連係させるのは難しかったが これで簡単にできるかもしれない。 SWT の開発環境は以前はデフォルトで入っていたらしいのだが 最近の版では別途インストールが必要らしい。 しかもプラットフォーム毎に異なるバイナリが使う必要がある。 以下のURLから使っているEclipseと同じ版の「SWT Binary and Source」 を落してきてインストールする。
- http://download.eclipse.org/eclipse/downloads/
この投稿へのコメント

コメント・フォーム