JRuby+Swing or SWT in NetBeans 6.0 Preview (M9)

 JRubyが1.0になったので、NetBeansの参照先も1.0にしてみる。

 ネットに落ちているJRuby+Swingのサンプルはけっこう1.0では動かない(JRuby付属のSwingサンプルはもちろん動くけど)。superclass must be a Classなんてエラーになってしまう。これはActionListenerをRuby側で継承しているのが原因。1.0で継承ではなくmixinになったようです。

ActionListener < Hoge

 じゃなくて

ActionListener 
  include Hoge

 にする。インスタンスに対して動的にやっているなら、

listener = java.awt.event.ActionListener.new
class << listener
  ...
end

 ではなくて

module Hoge
  ...
end
listener = java.awt.event.ActionListener.new
listener.extends Hoge

 にすればよい。

 いっぽうのJRuby+SWTWindowsでやる場合)は。dllの場所指定が必要。普通なら

  • swt.jarおよびswt-*-win32-3236.dllを%JRUBY_BASE%\lib以下にコピー
  • jruby.batに-Djava.library.path="%JRUBY_BASE%\lib"の追加

 で良いのだけど、NetBeans上で実行させようとすると、上記をしてもなぜか、Exception in thread "main" java.lang.UnsatisfiedLinkError: no swt-win32-3236 in java.library.pathエラーになってしまって、どうもパスを見てくれてないような気がする。

 うーむ。NetBeansJRuby+SWTは無理なのか。