Create  Edit  Diff  FrontPage  Index  Search  Changes  Login

The Backyard - RjbQandA Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

!RJBの質問と回答

!!質問:ところで、インタフェースのインポートは出来ないのですか?

!!!答え(by arton):出来ます。

C:\Home\arton\test>type sc.rb
require 'rjb'
Rjb::load
sc = Rjb::import('javax.swing.SwingConstants')
puts sc.BOTTOM
puts sc.LEFT

C:\Home\arton\test>ruby sc.rb
3
2

なお、定数へのアクセスはrjb-0.0.9からのサポートです。

!!質問 Cygwinでクラスパスを追加指定する方法がわかりません。(by ryugate)

Rjb::load('c:/lib/hoge.jar')
Rjb::load('c:\lib\hoge.jar')
Rjb::load('c:\\lib\\hoge.jar')
Rjb::load('/cygdrive/c/lib/hoge.jar')
Rjb::load(nil, ['-classpath c:/lib/hoge.jar'])
Rjb::load(nil, ['-classpath c:\lib\hoge.jar'])
Rjb::load(nil, ['-classpath c:\\lib\\hoge.jar'])
Rjb::load(nil, ['-classpath /cygdrive/c/lib/hoge.jar'])

のいずれでもだめでした。
どうぞよろしくお願いいたします。

!!!答え(by ryugate and arton):

rjb.0.2.1より前のバージョンではパスセパレータが;ではなかったためJVMが正しく処理できていませんでした。
rjb 0.2.1以降をお使いください。

!! 質問 classファイルからのクラスのインポートがうまくいきません。

jarファイルからは問題なくクラスがロードできるのですが、
フォルダに配置したclassファイルからのロードがうまくいきません。

Class.forName(String name)
も同様なのですが、
Class.forName(String name, boolean initialize, ClassLoader loader)
で、classLoaderを明示してあげるとうまくいきました。

!!!答え(by ryugate and arton):

rjb 0.2.3以降で修正されました。
Class#forName(String)はRjb::importと同様の動作となります。
またメソッドの戻り値がClassのインスタンスである場合もRjb::importと同等の処理が適用されます。
これらのimportされたオブジェクトをJavaのオブジェクトのメソッドへ引数として与えるとClassのインスタンスとして扱われます。


!!質問:Java側のメソッドを呼び出すとき、String型の引数にnilは渡せますか?
rjbでJavaのメソッドを呼び出すとき、String型の引数にnilを渡すと空文字列に変換されてしまうのですが、これはrjbの仕様なんでしょうか?(winebarrelさん)

!!!回答(by arton)
バグです。0.2.4で修正しました。