JRubyFXMLを少し試す
JRuby + JavaFX 2は自分が試した感じではRubyObjectはJavaFX Applicationのサブクラスには出来ないと怒られ素直なコードでは動きませんでした。
以下のこれですね。
java.lang.IllegalArgumentException - if appClass is not a subclass of Application.
少しひねってというかJava的な方法としてコンストラクタメソッドを作り(JRubyではinitializeメソッドですね)Platform.runLater selfで起動ということでWindowsとLinuxでは動きました。
Mac OS Xではjava.awt.HeadlessExceptionで動きません。
SwingとJavaFX 2の混合アプリでは必然的にJFXPanelを使うのでこの場合なら自然な流れかもしれません。
特徴的なとこだけ
$jfxp = JFXPanel.new def initialize super start(Stage.new) end
def run HelloJRubyFX.new puts self.to_java.java_class end Platform.runLater self
WindowsとLinuxなら既存JavaFX 2 FXMLアプリを.fxmlファイルをJRubyで読み込む事で利用できます。
そこでJRubyFXMLを試すことに
以下は概略と気がついた点です
説明としては不十分なところがあるとおもいます。
1. まずRuby Version Manager (RVM)のインストールとJRubyのインストール(細かい説明は省きます)
サイトのコマンドをそのまま実行したのでパス設定が.bashrcへ書き込まれた
.cshrcへ書き込み直し
優先順位のためこんな感じ
setenv PATH /Users/hshino/.rvm/bin:/usr/local/bin:/opt/local/bin:/opt/local/sbin:$PATH
hshino% ruby -v
ruby 1.9.3p362 (2012-12-25 revision 38607) [x86_64-darwin11.4.2]
hshino% jruby -v
jruby 1.7.0.RC2 (1.9.3p203) 2012-10-09 142cc7b on Java HotSpot(TM) 64-Bit Server VM 1.7.0_10-b18 [darwin-x86_64
2. JRubyFXMLのダウンロード
自分はZipファイルをダウンロードしました。
3. jfxrt.jarを/Users/hshino/.rvm/rubies/jruby-1.7.0.RC2/libへコピー
(各自の環境に合わせてください)
Getting Startedの手順でビルド
a. $ gem install rake bundler
b. git cloneしたディレクトリまたはzipを展開したディレクトリへ移動してrake install
$ git clone https://github.com/byteit101/JRubyFX
$ cd JRubyFX
$ rake install
ここではまりました(自分はログインシェルがtcshなので)
rubyコマンドをjrubyにリンクさせてない場合は
jruby -S rake install
のようです。
ログインシェルがbashで
rvm use jruby-1.7.0.RC2
としてあればrubyコマンドがjrubyにリンクしているので
$ rake install
です。
4. /Users/hshino/.rvm/rubies/jruby-1.7.0.RC2/lib/ruby/sharedへ
~/Downloads/JRubyFXML-master/lib内をすべてコピー
(各自の環境に合わせてください)
こんな感じで
cp /Users/hshino/Downloads/JRubyFXML-master/lib/jrubyfx.rb ./
cp /Users/hshino/Downloads/JRubyFXML-master/lib/jrubyfx_tasks.rb ./
cp -r /Users/hshino/Downloads/JRubyFXML-master/lib/jrubyfx ./
5. sampleを実行してみる
jruby samples/fxml/Demo.rb
6. 改造してみる