java - 使用 jruby 时出现 NullPointerException

标签 java nullpointerexception jruby

我使用javax.script.ScriptEngineManager将jruby脚本引擎嵌入到我的java程序中

我制作了一些以 do ~ end block 结尾的 jruby 代码, 运行所有代码后,发生 NullPointerException。 但代码以任何其他语句结束,不会发生异常。

版本:1.7.19

Caused by: java.lang.NullPointerException
    at org.jruby.embed.variable.Argv.updateARGV(Argv.java:169)
    at org.jruby.embed.variable.Argv.retrieve(Argv.java:158)
    at org.jruby.embed.variable.VariableInterceptor.retrieve(VariableInterceptor.java:154)
    at org.jruby.embed.internal.BiVariableMap.retrieve(BiVariableMap.java:378)
    at org.jruby.embed.internal.EmbedEvalUnitImpl.run(EmbedEvalUnitImpl.java:124)

在 ARGV.java updateARGV

if (vars.containsKey((Object)name)) {
    var = vars.getVariable((RubyObject)receiver.getRuntime().getTopSelf(), name);
        var.setRubyObject(argv);

vars.getVariable 返回 null,因为 isReceiverIdentical 返回 false 在 BiVariableMap.java

if (var.isReceiverIdentical(receiver)) {
    return var;
}

在 isReceiverIdentical 中,该方法只是使用 '==' 将接收者与 BiVariable 的接收者进行比较。

这是 jruby bug 吗?或者我必须为此做点什么? 如果您需要有关此问题的更多信息,请评论!

<小时/>

我从 ScriptEngineManager 获取了 ScriptEngine(engine) 并设置了一些 java 实例和方法,如下所示

engine.put("this", console);
engine.eval("$command = $this.java_method :command, [java.lang.String]");

这是我的测试 ruby​​ 代码。 resulttab 是 java 对象 有一些方法返回字符串和列表。

result = $command.call "something to pass"
puts result.getMessage
tabular = result.getData

tabular.each do |tab|
  rows = tab.getRows
  rows.each do |row|
    puts row
  end
  puts tab.getColumnNames
end

最佳答案

我通过创建新的Ruby对象在我的java代码中创建了ruby类型对象...

这会导致 updateARGV 中的检查失败,因为在 BiVariableMap 中注册变量的接收器和更新变量的另一个接收器不同。

因此,我从新的 ScriptingContainer 中获取了一个 Ruby 对象(如果本地上下文是单例,我们始终可以从中获取相同的 Ruby 对象),并使用它在我的 java 代码中创建新的 ruby​​ 类型对象。

引用:https://github.com/jruby/jruby/wiki/RedBridge#Singleton

关于java - 使用 jruby 时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28713246/

相关文章:

类别中的 java log4j 异常

java - 测试中未抛出 NullPointerExceptions

java - 启动 Rails 服务器时出现参数转储格式错误

JRuby EventMachine 没有要加载的文件

java - 获取有关 json 的错误,我是 Android World 的新手

java - 如何在hbase中将列添加到列族

javascript - 为什么在 Google 搜索框中输入字符时 FirBug 上什么也没有显示?

java - 了解 Android 应用程序中的内存泄漏

java - 通过 JDBC 查询登录时出现 NullPointerException 错误

tomcat - 无需编译即可在测试服务器上部署 jruby 或 grails