Tôi đang cố gắng sử dụng Java Opencl từ bên trong jruby, nhưng tôi đang gặp phải sự cố mà tôi không thể giải quyết, thậm chí với nhiều tìm kiếm trên google.Sự cố khi sử dụng lớp java trong 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)
khi tôi chạy mã này sử dụng: JRuby test.rb tôi nhận được lỗi sau, khi dòng cuối cùng là không chú thích:
#<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
Chỉ cần tự hỏi liệu có ai có một ý tưởng về cách giải quyết vấn đề này?
EDIT: ok vì vậy tôi nghĩ rằng tôi đã giải quyết được phần đầu tiên của vấn đề này bằng cách làm cho các nền tảng một mảng:
platforms = org.jocl.cl_platform_id[1].new
nhưng điều đó dẫn đến lỗi này khi thêm vài dòng:
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'
vì một lý do khi tôi in các lớp của các nền tảng [0] nó được liệt kê như NilClass !?