我在 Ubuntu x64 位上运行:
java version "1.6.0_18"
OpenJDK Runtime Environment (IcedTea6 1.8) (6b18-1.8-0ubuntu1)
OpenJDK 64-Bit Server VM (build 14.0-b16, mixed mode)
和
jruby 1.4.0 (ruby 1.8.7 patchlevel 174) (2010-02-11 6586) (OpenJDK 64-Bit Server VM 1.6.0_18) [amd64-java]
我在家里的 Windows 7 计算机上运行此代码。我最近将整个文件夹复制到 Ubuntu,安装了 java、jruby 和相关的 gem,但是当我运行我的主文件时出现此错误:
jruby run.rb test
=================Processing FREDERICKSBURG_1.1=======================
ERROR IN TESTING wrong element type class java.lang.String(array contains char)
/home/daryl/Desktop/work/Code/geografikos/lib/sentence_splitter/splitter.rb:21:in `to_java'
/home/daryl/Desktop/work/Code/geografikos/lib/sentence_splitter/splitter.rb:21:in `split'
/home/daryl/Desktop/work/Code/geografikos/lib/models/page.rb:103:in `sentences'
/home/daryl/Desktop/work/Code/geografikos/lib/extractor/lingpipe_svm.rb:34:in `extract'
/home/daryl/Desktop/work/Code/geografikos/lib/extractor/geo_controller.rb:9:in `process'
/home/daryl/Desktop/work/Code/geografikos/lib/extractor/geo_controller.rb:8:in `each'
/home/daryl/Desktop/work/Code/geografikos/lib/extractor/geo_controller.rb:8:in `process'
/home/daryl/Desktop/work/Code/geografikos/lib/extractor/geo_controller.rb:6:in `each'
/home/daryl/Desktop/work/Code/geografikos/lib/extractor/geo_controller.rb:6:in `process'
/home/daryl/Desktop/work/Code/geografikos/lib/statistics.rb:111:in `generate_all'
/home/daryl/Desktop/work/Code/geografikos/lib/statistics.rb:105:in `each'
/home/daryl/Desktop/work/Code/geografikos/lib/statistics.rb:105:in `generate_all'
run.rb:56
错误的重点是:ERROR IN TESTING wrong element type class java.lang.String(array contains char)
在我的 Windows 机器上一切正常。我想我收到这个错误是因为我没有设置 JAVA_HOME 但是我将它添加到 bashrc 为:
export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk
并确认:
echo $JAVA_HOME
/usr/lib/jvm/java-1.6.0-openjdk
我可以通过在 Windows 上删除我的 JAVA_HOME 变量来产生类似的错误:
=================Processing FREDERICKSBURG_1.3=======================
ERROR IN TESTING cannot convert instance of class org.jruby.RubyString to char
C:/work/Code/geografikos/lib/sentence_splitter/splitter.rb:21:in `to_java'
C:/work/Code/geografikos/lib/sentence_splitter/splitter.rb:21:in `split'
C:/work/Code/geografikos/lib/models/page.rb:103:in `sentences'
C:/work/Code/geografikos/lib/extractor/lingpipe_svm.rb:34:in `extract'
C:/work/Code/geografikos/lib/extractor/geo_controller.rb:9:in `process'
C:/work/Code/geografikos/lib/extractor/geo_controller.rb:8:in `each'
C:/work/Code/geografikos/lib/extractor/geo_controller.rb:8:in `process'
C:/work/Code/geografikos/lib/extractor/geo_controller.rb:6:in `each'
C:/work/Code/geografikos/lib/extractor/geo_controller.rb:6:in `process'
C:/work/Code/geografikos/lib/statistics.rb:111:in `generate_all'
C:/work/Code/geografikos/lib/statistics.rb:105:in `each'
C:/work/Code/geografikos/lib/statistics.rb:105:in `generate_all'
run.rb:56
显然不完全一样,但我感觉这与 java 路径有关。您可能会从我只是尝试使用 to_java 将 ruby 变量转换为 java 的错误中得出。这在我的 Windows 机器上运行良好,我已经确认宝石是相同的,但我认为这与宝石无关。
我撒了谎。我将我的 JAVA_HOME 改回我的 Windows 机器上,但仍然出现此错误。所以现在代码突然不能在任何一台机器上运行。我最近在我的 Windows 机器上安装了 git 并将代码添加到存储库中。但我并没有真正用它做任何事情。它所说的只是它将所有 LF 转换为 CRLF ...虽然应该不会改变任何东西吗?关于为什么我现在收到这些错误的任何想法?除了安装 git 之外,我几个月来没有在我的 Windows 机器上进行任何更改。
更新:发生的事情是我无法将 ruby 字符串转换为 java char,即使 ruby 字符串只有 1 个字符长。这种情况以前从未发生过,我的 java 文件已经有 2 个多月没有更新了。我也没有更新红宝石。
这是此时与错误相关的代码行:
tokenizer = IndoEuropeanTokenizerFactory.new.tokenizer(text.split('').to_java(:char), 0, text.length)
其中文本只是一个干净的文本段落,被分成每个字符。类似的复制:
irb(main):002:0> ['1','2','3'].to_java :char
ArgumentError: wrong element type class java.lang.String(array contains char)
from (irb):3:in `to_java'
from (irb):3
irb(main):003:0> exit