首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试使用(RJB) gem的错误“无法创建Java”

尝试使用(RJB) gem的错误“无法创建Java”
EN

Stack Overflow用户
提问于 2013-09-15 22:55:43
回答 1查看 3.6K关注 0票数 4

我正在尝试实现(RJB) gem,以便与JVM对话,这样我就可以运行Open创业板。我已经在Windows 8上安装并运行了Java,所有的迹象,至少是我所知道的,都表明Java已经安装和运行。但是,试图使用RJB的尝试在消息“无法创建Java”中失败。(在其他情况下,我有时会得到“Fiddle:Module”的“未定义方法”‘`dlopen’,这也是难以理解的。)

最初,我只是按默认值安装了JDK。由于我的64位系统,这个安装了64位的Java.我不确定Ruby和RJB是否会这样做,所以我安装了32位的JRE。但是,错误是相同的。

我还可以运行更多的测试来确保JVM在Ruby之外工作吗?

有人能告诉我运行Windows/Ruby/RJB/JVM需要做些什么吗?

谢谢..。

我使用BitNami Rubystack和Ruby1.9.3p448运行Windows 8。

根据testjava.jsp,Java似乎是可用的:

这是代码,包括我找到它的URL:

代码语言:javascript
复制
class FiddleTry

# http://devjete.wordpress.com/2011/01/31/installing-rjb-1-3-4-on-windows-7-32bit-wo-vc/
  require 'rjb'
  out = Rjb::import('java.lang.System').out  <== Line 5 is here
  out.print('Hello Rjb from ')
  p out._classname
end

以下是错误消息:

代码语言:javascript
复制
C:/Users/Richard/RubymineProjects/Utilities/fiddle_try.rb:5:in `import': can't create Java VM (RuntimeError)
    from C:/Users/Richard/RubymineProjects/Utilities/fiddle_try.rb:5:in `<class:FiddleTry>'
    from C:/Users/Richard/RubymineProjects/Utilities/fiddle_try.rb:1:in `<top (required)>'
    from -e:1:in `load'
    from -e:1:in `<main>'

我找不到任何关于为什么它“不能创建Java”的其他信息。如果我能得到更多的信息,那会很有帮助的。我希望你能提供这方面的信息或者解决这个问题。谢谢..。

编辑添加有关对RJB的开放-NLP要求的信息。

这是我试图运行的代码,摘自Github/Open-nlp:

代码语言:javascript
复制
class OpenNlpSample
  ENV['JAVA_HOME'] = "C:/Program Files/Java/jdk1.7.0_25" if ENV['JAVA_HOME'].nil?
  ENV['LD_LIBRARY_PATH'] = "C:/Program Files/Java/jdk1.7.0_25/bin; C:/Program Files (x86)/Java/jre7" if ENV['LD_LIBRARY_PATH'].nil?
  # Load the module
  require 'open-nlp'
  gem_bin = File.join(Gem.loaded_specs['open-nlp'].full_gem_path, 'bin/')
# Set an alternative path to look for the JAR files.
# Default is gem's bin folder.
# OpenNLP.jar_path = '/path_to_jars/'
# OpenNLP.jar_path = File.expand_path('../../ruby/lib/ruby/gems/1.9.1/gems/open-nlp-0.1.4/bin',__FILE__)
  OpenNLP.jar_path = gem_bin
# Set an alternative path to look for the model files.
# Default is gem's bin folder.
# OpenNLP.model_path = '/path_to_models/'
  OpenNLP.model_path = gem_bin
# Pass some alternative arguments to the Java VM.
# Default is ['-Xms512M', '-Xmx1024M'].
# OpenNLP.jvm_args = ['-option1', '-option2']
  OpenNLP.jvm_args = ['-Xms512M', '-Xmx1024M']
# Redirect VM output to log.txt
  OpenNLP.log_file = 'log.txt'
# Set default models for a language.
# OpenNLP.use :language
  OpenNLP.use :english

=begin
  Examples

  Simple tokenizer
=end

  OpenNLP.load

  sent = "The death of the poet was kept from his poems."
  tokenizer = OpenNLP::SimpleTokenizer.new

  tokens = tokenizer.tokenize(sent).to_a
# => %w[The death of the poet was kept from his poems .]


  #Maximum entropy tokenizer, chunker and POS tagger

  OpenNLP.load

  chunker   = OpenNLP::ChunkerME.new
  tokenizer = OpenNLP::TokenizerME.new
  tagger    = OpenNLP::POSTaggerME.new

  sent   = "The death of the poet was kept from his poems."

  tokens = tokenizer.tokenize(sent).to_a
# => %w[The death of the poet was kept from his poems .]

  tags   = tagger.tag(tokens).to_a
# => %w[DT NN IN DT NN VBD VBN IN PRP$ NNS .]

  chunks = chunker.chunk(tokens, tags).to_a
# => %w[B-NP I-NP B-PP B-NP I-NP B-VP I-VP B-PP B-NP I-NP O]


  #Abstract Bottom-Up Parser

  OpenNLP.load

  sent      = "The death of the poet was kept from his poems."
  parser = OpenNLP::Parser.new
  parse = parser.parse(sent)

  parse.get_text.should eql sent

  parse.get_span.get_start.should eql 0
  parse.get_span.get_end.should eql 46
  parse.get_child_count.should eql 1

  child = parse.get_children[0]

  child.text # => "The death of the poet was kept from his poems."
  child.get_child_count # => 3
  child.get_head_index #=> 5
  child.get_type # => "S"


  #Maximum Entropy Name Finder*

                           OpenNLP.load

  text = File.read('./spec/sample.txt').gsub!("\n", "")

  tokenizer   = OpenNLP::TokenizerME.new
  segmenter   = OpenNLP::SentenceDetectorME.new
  ner_models  = ['person', 'time', 'money']

  ner_finders = ner_models.map do |model|
    OpenNLP::NameFinderME.new("en-ner-#{model}.bin")
  end

  sentences = segmenter.sent_detect(text)
  named_entities = []

  sentences.each do |sentence|

    tokens = tokenizer.tokenize(sentence)

    ner_models.each_with_index do |model,i|
      finder = ner_finders[i]
      name_spans = finder.find(tokens)
      name_spans.each do |name_span|
        start = name_span.get_start
        stop  = name_span.get_end-1
        slice = tokens[start..stop].to_a
        named_entities << [slice, model]
      end
    end

  end


=begin
  Loading specific models

  Just pass the name of the model file to the constructor. The gem will search for the file in the OpenNLP.model_path folder.
=end

                                                                                                                          OpenNLP.load

  tokenizer = OpenNLP::TokenizerME.new('en-token.bin')
  tagger = OpenNLP::POSTaggerME.new('en-pos-perceptron.bin')
  name_finder = OpenNLP::NameFinderME.new('en-ner-person.bin')
# etc.


  #Loading specific classes

  #You may want to load specific classes from the OpenNLP library that are not loaded by default. The gem provides an API to do this:

# Default base class is opennlp.tools.
      OpenNLP.load_class('SomeClassName')
# => OpenNLP::SomeClassName

# Here, we specify another base class.
  OpenNLP.load_class('SomeOtherClass', 'opennlp.tools.namefind')
# => OpenNLP::SomeOtherClass



  end

在这一点上,代码:

代码语言:javascript
复制
=begin
  Examples

  Simple tokenizer
=end

  OpenNLP.load

呼叫链为dl.rb、fiddle.rb和jar_loader.rb。jarloader.rb第43行起始行:

代码语言:javascript
复制
# Load Rjb and create Java VM.
def self.init_rjb
  ::Rjb::load(nil, self.jvm_args)
  set_java_logging if self.log_file
end

此时,我在创建JVM时也会遇到同样的错误。所以,我又开始尝试运行RJB。错误链如下:

代码语言:javascript
复制
Fast Debugger (ruby-debug-ide 0.4.17, ruby-debug-base19x 0.11.30.pre12) listens on 127.0.0.1:59488
Uncaught exception: can't create Java VM
    D:/BitNami/rubystack-1.9.3-12/ruby/lib/ruby/gems/1.9.1/gems/bind-it-0.2.7/lib/bind-it/jar_loader.rb:45:in `load'
    D:/BitNami/rubystack-1.9.3-12/ruby/lib/ruby/gems/1.9.1/gems/bind-it-0.2.7/lib/bind-it/jar_loader.rb:45:in `init_rjb'
    D:/BitNami/rubystack-1.9.3-12/ruby/lib/ruby/gems/1.9.1/gems/bind-it-0.2.7/lib/bind-it/jar_loader.rb:38:in `load_jar_rjb'
    D:/BitNami/rubystack-1.9.3-12/ruby/lib/ruby/gems/1.9.1/gems/bind-it-0.2.7/lib/bind-it/jar_loader.rb:27:in `load'
    D:/BitNami/rubystack-1.9.3-12/ruby/lib/ruby/gems/1.9.1/gems/bind-it-0.2.7/lib/bind-it/binding.rb:63:in `load_jar'
    D:/BitNami/rubystack-1.9.3-12/ruby/lib/ruby/gems/1.9.1/gems/bind-it-0.2.7/lib/bind-it/binding.rb:71:in `block in load_default_jars'
    D:/BitNami/rubystack-1.9.3-12/ruby/lib/ruby/gems/1.9.1/gems/bind-it-0.2.7/lib/bind-it/binding.rb:68:in `each'
    D:/BitNami/rubystack-1.9.3-12/ruby/lib/ruby/gems/1.9.1/gems/bind-it-0.2.7/lib/bind-it/binding.rb:68:in `load_default_jars'
    D:/BitNami/rubystack-1.9.3-12/ruby/lib/ruby/gems/1.9.1/gems/bind-it-0.2.7/lib/bind-it/binding.rb:55:in `bind'
    D:/BitNami/rubystack-1.9.3-12/ruby/lib/ruby/gems/1.9.1/gems/open-nlp-0.1.4/lib/open-nlp.rb:14:in `load'
    C:/Users/Richard/RubymineProjects/Utilities/open_nlp_sample.rb:32:in `<class:OpenNlpSample>'
    C:/Users/Richard/RubymineProjects/Utilities/open_nlp_sample.rb:1:in `<top (required)>'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-24 13:10:01

首先,我需要卸载Java x64并安装JDK x586以获得32位支持。

然后,将JAVA_HOME设置为:

代码语言:javascript
复制
JAVA_HOME=C:\Program Files (x86)\Java\jdk1.7.0_40

并将JAVA_HOME添加到我的路径中:

代码语言:javascript
复制
%JAVA_HOME%\bin;C:\Program Files (x86)\Java\jre7\bin;

这解决了“无法创建Java”的问题。

设置$DEBUG=false或注释行,可以消除所有其他消息。$DEBUG模式显示可能被捕获和解决的错误消息,因此它们可以被忽略。

在解决了“无法创建Java”问题后,所有其他错误消息都是这种类型的,因此是假的。

JetBrains对Rubymine的支持为我解决了这个问题。他们非常好,特别是Serge,我推荐他们的产品,因为他们的支持。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18818322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档