JRubyFXMLを少し試す

JRuby + JavaFX 2は自分が試した感じではRubyObjectはJavaFX Applicationのサブクラスには出来ないと怒られ素直なコードでは動きませんでした。
以下のこれですね。
java.lang.IllegalArgumentException - if appClass is not a subclass of Application.
少しひねってというかJava的な方法としてコンストラクタメソッドを作り(JRubyではinitializeメソッドですね)Platform.runLater selfで起動ということでWindowsLinuxでは動きました。
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

WindowsLinuxなら既存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

ruby -vとjruby -vで確認

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. 改造してみる