jruby

2011-10-03 6 views
6

के भीतर जावा क्लास का उपयोग करने में समस्या मैं jruby के भीतर से Java Opencl का उपयोग करने की कोशिश कर रहा हूं, लेकिन मुझे ऐसी समस्या का सामना करना पड़ रहा है जिसे मैं हल नहीं कर सकता, यहां तक ​​कि Google खोज के साथ भी।jruby

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 मैं निम्न त्रुटि, जब अंतिम पंक्ति uncommented है:

#<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 

बस सोच किसी को कैसे हल करने के लिए पर एक विचार है कि क्या यह समस्या?

संपादित करें: ठीक तो मुझे लगता है मैं प्लेटफार्मों एक सरणी बनाने के द्वारा इस समस्या का पहला हिस्सा हल किया है:

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 से पीछे नहीं पैरामीटर के रूप में और वह काम नहीं करता, क्योंकि विधि का दूसरा तर्क एक (खाली) सरणी org.jocl.cl_platform_id वस्तुओं की की आवश्यकता है।

क्या त्रुटि का कहना है: "मैं कुछ एक जावा वस्तु के लिए प्रॉक्सी है कि है और मैं, org.jocl.cl_platform_id ऑब्जेक्ट की श्रृंखला एक में बदल नहीं सकते, क्योंकि तुम मुझे क्या करना पूछ रहे हैं

हैं। तुम सिर्फ

platforms = [] 

कहना और उस में पारित, यह सिर्फ :) काम हो सकता है।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^