JRuby 创建 Java 类型强制浮点数组时出现问题



我正在使用jruby-9.2.6.0导入Java pdf库。 PDColor 是一个类,它被一个浮点数数组和一个字符串常量实例化。我引用的 Java 示例代码如下所示:

import org.apache.pdfbox.pdmodel.graphics.color.PDColor;
PDColor componentColor = new PDColor(new float[]{1, 0, 0}, PDDeviceRGB.INSTANCE);

jruby中,我的代码如下所示:

import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB;
float_arr = [1.to_f, 0.to_f, 0.to_f]
componentColor = PDColor.new(float_arr, PDDeviceRGB::INSTANCE)

问题是,似乎float_arr参数没有类型化为浮点数组,因此我们得到以下错误:

NameError (no constructor for arguments (org.jruby.RubyArray,org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB) on Java::OrgApachePdfboxPdmodelGraphicsColor::PDColor)
  available overloads:
    (org.apache.pdfbox.cos.COSArray,org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace)
    (org.apache.pdfbox.cos.COSName,org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace)
    (float[],org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace)

jruby中是否有一种已知的方法可以将浮点数的 Ruby 数组转换为 Java 浮点数组?

正如@TilmanHausherr所提到的,构造函数需要一个原始浮点数的 Java 数组。要创建它,您可以调用 Array#to_java(:float)

下面是一个测试此行为的小程序。 pdfbox-2.0.15.jar应与脚本位于同一文件夹中,脚本应使用 jruby 运行:

require './pdfbox-2.0.15.jar'
java_import 'org.apache.pdfbox.pdmodel.graphics.color.PDColor'
java_import 'org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB'
red = PDColor.new([1.0, 0, 0].to_java(:float), PDDeviceRGB::INSTANCE)
puts red
#=> PDColor{components=[1.0, 0.0, 0.0], patternName=null}

最新更新