Linuxで Rhino

Ubuntuの場合, rhinoパッケージが用意してあったりする。

warp@balthasar ~/gui> aptitude search rhino
p   rhino            - JavaScript engine written in Java          
p   rhino-doc        - Documentation for rhino Java Script Engine 
p   rhinote          - virtual sticky-notes for your desktop      
warp@balthasar ~/gui> aptitude install rhino

でもってさらに SWTなんか installしてみたりして。

warp@balthasar ~/gui> aptitude search swt
p   libswt-motif3-java          - Standard Widget Toolkit for Motif JAR library                
p   libswt-motif3-jni           - Standard Widget Toolkit for Motif JNI library                
p   libswt-pocketpc3-java       - Standard Widget Toolkit for PocketPC JAR library             
p   libswt-pocketpc3-jni        - Standard Widget Toolkit for PocketPC JNI library             
p   libswt3.1-gtk-gcj           - Fast and rich GUI toolkit for Java, gtk2 (GCJ version)       
p   libswt3.1-gtk-java          - Fast and rich GUI toolkit for Java, gtk2 version             
p   libswt3.1-gtk-jni           - Platform dependent files for libswt3.1-gtk-java              
p   libswt3.2-gtk-gcj           - Fast and rich GUI toolkit for Java, gtk2 (GCJ version)       
p   libswt3.2-gtk-java          - Fast and rich GUI toolkit for Java, gtk2 version             
p   libswt3.2-gtk-jni           - Platform dependent files 
warp@balthasar ~/gui> aptitude install libswt3.2-gtk-gcj

rhinoを簡単に導入できるのはよいけど E4Xが使えない感じ。なんか特別なバージョンっぽい。http://xmlbeans.apache.org/sourceAndBinaries/ から xbean.jar持ってきても動かないし。
てゆーことで, 本家の rhino持ってきて js.jarを置き換えてみたりして。

warp@balthasar ~/rhino1_6R5> rhino
@IMPLEMENTATION.VERSION@
js> 
warp@balthasar ~/rhino1_6R5> ls /usr/share/java/js*   # シンボリックリンクだったり
/usr/share/java/js-1.6.jar  /usr/share/java/js.jar
warp@balthasar ~/rhino1_6R5> sudo mv js.jar /usr/share/java/js-1.6R5.jar
warp@balthasar ~/rhino1_6R5> pushd /usr/share/java/
warp@balthasar /u/s/java> sudo rm /usr/share/java/js.jar
warp@balthasar /u/s/java> ln -s js-1.6R5.jar js.jar
warp@balthasar /u/s/java> popd
warp@balthasar ~/rhino1_6R5> ls /usr/share/java/js* -l
-rw-r--r-- 1 root root 548599 2005-06-30 03:58 /usr/share/java/js-1.6.jar
-rw-r--r-- 1 warp warp 708951 2006-11-18 15:46 /usr/share/java/js-1.6R5.jar
lrwxrwxrwx 1 root root     12 2007-03-26 13:02 /usr/share/java/js.jar -> js-1.6R5.jar
warp@balthasar ~/rhino1_6R5> rhino   # 次に xbean.jarを導入 (先に導入しててよいけど)
Rhino 1.6 release 5 2006 11 18
js>
js> environment['java.ext.dirs']
/usr/share/java/ext
js>
warp@balthasar ~/rhino1_6R5> ls /usr/share/java/ext
ls: /usr/share/java/ext: No such file or directory
warp@balthasar ~/rhino1_6R5> sudo mkdir /usr/share/java/ext
warp@balthasar ~/rhino1_6R5> sudo cp ~/xmlbeans-2.2.0/lib/xbean.jar /usr/share/java/ext/
warp@balthasar ~/rhino1_6R5> rhino   # 動作確認
Rhino 1.6 release 5 2006 11 18
js> var v = <test/>
js> 

SWTを試してみる

SWT導入したのはよいけど, /usr/share/java以下に見当たらない。探してみると /usr/lib/java/ に入ってたりして。

warp@balthasar ~/gui> sudo ln -s /usr/lib/java/swt.jar /usr/share/java/ext/

さてアレだ … つっても SWT作ったことないし分かんないや。てへ。
ちとググって作ってみよー …

importClass(Packages.org.eclipse.swt.widgets.Display)
importClass(Packages.org.eclipse.swt.widgets.Shell)

var display = new Display()
var shell = new Shell(display)
shell.text = 'Hello, World.'
shell.setSize(200, 100)
shell.open()
while (!shell.disposed) {
  if (!display.readAndDispatch())
    display.sleep()
}
display.dispose()
warp@balthasar ~/gui> rhino hello.js

たぶんコレって動いてるんだろー。きっとそうだ。