- newしたときにオーバーロードされていても判断しきれていない場合がある。エラーを吐くべきだがStringとプリミティブ型は難しくない場合は自動認識して欲しい。(javax.swing.JButtonをnew("ぼたん")としたらどうもIconのインスタンスだと思われたようだ。
バイト列だから?)
- 下の例外はコンストラクタとは関係ないようですが、できれば元のスクリプトが欲しいです。って言うか、いきなりJButtonをimportしたらいきなりSEGVするなぁ(実はJavaのGUIプログラミングは苦手というか良く知らなくてIDE任せだったり)。ちなみに自動認識はある程度まではしています。最初に一致したシグネチャーを使うという方法ですが。L'eclatのほうに書いている、Win32とMacで並び順が違ってテストでエラーっていうパターンはその類。
- rjb.c(rjb_newinstance:2071)でif ((*pc)->arg_count == argc)してて、最初に一致するコンストラクタがnew JButton(java.awt.Icon)だからエラーが出たのだと思う。引数からシグネチャを生成すればいいんだろうけどいい案は無い。以下スクリプトそのもの。サイズがおかしいが、適当にJForm::setSize()してpack()すればよい。そしてisVisible()を監視するのは邪道気味。Javaの文字列はUnicodeなのでフックしないと文字化けしちゃうなあ。うーんなんでiconv動かんのじゃ〜。
- なんだ、ばれてますね(一致=引数の数であって型じゃない)。型見るの面倒だけど文字列くらいは見るようにしましょう。
require 'rjb'
Rjb::load
frame = Rjb::import('javax.swing.JFrame')
box_layout = Rjb::import('javax.swing.BoxLayout')
border_layout = Rjb::import('java.awt.BorderLayout')
grid_layout = Rjb::import('java.awt.GridLayout')
button = Rjb::import('javax.swing.JButton')
f = frame.new
#f.getContentPane().setLayout(grid_layout.new)
f.getContentPane().setLayout(border_layout.new)
#b = button.new_with_sig("Ljava.lang.String;", "ぼたん") #動く
b = button.new("ぼたん") #変
#f.getContentPane().add(b)
f.getContentPane()._invoke('add', 'Ljava.awt.Component;', b)
f.setVisible(true)
loop do
break unless f.isVisible()
sleep(0.1)
end
Keyword(s):
References:[RubyJavaブリッヂ]