RubyJavaBridge 質問と回答
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で修正しました。
Keyword(s):[Rjb]
References:[RubyJavaブリッヂ] [RubyJavaBridgeJa]