2011-10-03 11 views
6

jrubyからJava Openclを使用しようとしていますが、多くのGoogle検索でも解決できない問題が発生しています。jruby内でJavaクラスを使用する際のトラブル

require 'java' 
require 'JOCL-0.1.7.jar' 

platforms = org.jocl.cl_platform_id.new 
puts platforms.class 
org.jocl.CL.clGetPlatformIDs(1, platforms, nil) 

私が使用してこのコードを実行すると:JRubyのtest.rb を最後の行がコメント解除されているとき、私は、次のエラーを取得する:

#<Class:0x10191777e> 
TypeError: cannot convert instance of class org.jruby.java.proxies.ConcreteJavaP 
roxy to class [Lorg.jocl.cl_platform_id; 
    LukeTest at test.rb:29 
    (root) at test.rb:4 

は、誰もが解決する方法についてのアイデアを持っているかどうかを疑問に思いますこの問題?

EDIT: OKので、私は、私はプラットフォームの配列を作ることによって、この問題の最初の部分を解決したと思う:

platforms = org.jocl.cl_platform_id[1].new 

が、次の数行を追加するときには、このエラーにつながった:

私はプラットフォームのクラスを印刷何らかの理由
context_properties = org.jocl.cl_context_properties.new() 
context_properties.addProperty(org.jocl.CL::CL_CONTEXT_PLATFORM, platforms[0]) 
CodegenUtils.java:98:in `human': java.lang.NullPointerException 
    from CodegenUtils.java:152:in `prettyParams' 
    from CallableSelector.java:462:in `argumentError' 
    from CallableSelector.java:436:in `argTypesDoNotMatch' 
    from RubyToJavaInvoker.java:248:in `findCallableArityTwo' 
    from InstanceMethodInvoker.java:66:in `call' 
    from CachingCallSite.java:332:in `cacheAndCall' 
    from CachingCallSite.java:203:in `call' 
    from test.rb:36:in `module__0$RUBY$LukeTest' 
    from test.rb:-1:in `module__0$RUBY$LukeTest' 
    from test.rb:4:in `__file__' 
    from test.rb:-1:in `load' 
    from Ruby.java:679:in `runScript' 
    from Ruby.java:672:in `runScript' 
    from Ruby.java:579:in `runNormally' 
    from Ruby.java:428:in `runFromMain' 
    from Main.java:278:in `doRunFromMain' 
    from Main.java:198:in `internalRun' 
    from Main.java:164:in `run' 
    from Main.java:148:in `run' 
    from Main.java:128:in `main' 

[0]これはNilClassとしてリストされています!

答えて

1

あなたは非常に単純な間違いを見落としています。あなたは書き込みます

platforms = org.jocl.cl_platform_id.new 

しかし、その行はクラスorg.jocl.cl_platform_idの単一インスタンスを作成します。その後通過その

org.jocl.CL.clGetPlatformIDs(1, platforms, nil) 

org.jocl.CL.clGetPlatformIDsの2番目のパラメータとして、その方法の2番目の引数が(空の)アレイorg.jocl.cl_platform_idオブジェクトのを必要とするので、動作しません。

どのようなエラーが言うことである:「私は、Javaオブジェクトのプロキシで何かを持っているとあなたがする私を求めているように私は、org.jocl.cl_platform_idオブジェクトの配列にそれを回すことができない

の場合あなたはそれがちょうど:)うまくいくかもしれない、

platforms = [] 

を言って、それを渡す。

関連する問題