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で修正しました。
!!質問:ところで、インタフェースのインポートは出来ないのですか?
!!!答え(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で修正しました。