0

LuaJavaを使用して整数型を強制する方法はありますか? LuaJ 3.0 beta 1(luaj-jse-3.0-beta1.jar)で、 のインスタンスを作成しようとしていますjava.awt.ColorJava API のコンストラクター ( JavaAPI )が利用可能であることを考えると、これがそのような問題になるとは思わないでしょう。整数をコンストラクターに強制的に入れることに興味がある理由は、利用可能なコンストラクターがまたはColorのいずれかの 3 つまたは 4 つの引数を取るためです。Lua の数値型はであるため、LuaJ (または LuaJava) はコンストラクターのバージョンを呼び出します。intfloatdoublefloat

最初はこれで問題ないと思っていたのですが、使ってみたらエラーメッセージが届いていることに気づきましたColor。値がコンストラクターに適切に渡されておらず、Colorオブジェクトは本質的に破損しており、識別可能なエラーはありませんでした (何もクラッシュせず、表示されませんでした)。

簡単な例を次に示します。

local j_color = luajava.newInstance( "java.awt.Color", r, g, b );
print( j_color );

r = 1.0このコンストラクタにg = 0.2,を渡しb = 0.2てから print するとj_color

java.awt.Color[r=0,g=0,b=1]

出力で。実際、私は好きなものをrとであるg限りb = 0問題なく使用できますが、それ以外の場合は、痛みや苦しみが生じます。

他の誰かがこの問題に遭遇したかどうか知りたいです。解決しない場合は、LuaJ プロジェクトの PI に連絡し、報告します。

補足として、カスタムメイドの Java 関数を使用してColor. この問題が存在すること、および使用するコンストラクターを指定する方法があるかどうか、またはLuaJavaにdoubleではなく整数を使用するように明示的に指示する方法があるかどうかについて、私はより懸念しています。

アップデート

また、four-float コンストラクターを使用しようとしましたが、同じ問題が発生します。次のいずれかの値を渡すとalpha=0, 0.5, 1、コンストラクターは適切に機能します。それ以外の場合は、上記の結果が得られます。

4

2 に答える 2

1

次のように、luaj に 3 float コンストラクターを使用させることができます。

function color(r,g,b)
    r = luajava.newInstance("java.lang.Float",r)
    g = luajava.newInstance("java.lang.Float",g)
    b = luajava.newInstance("java.lang.Float",b)
    return luajava.newInstance("java.awt.Color",r,g,b)
end

もちろん、他のオーバーロードされたコンストラクター形式のいずれかを luaj に強制的に使用させるために、同様のことを行うこともできます。

于 2014-01-15T17:14:13.020 に答える