встроить скрипт движок JRuby в мою Java программу с помощью javax.script.ScriptEngineManager
NullPointerException при использовании JRuby
Я сделал некоторый JRuby код, который закончится с do ~ end
блоком, после выполнения всего кода, 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 возвращается нуль из-за isReceiverIdentical возвращения ложной в BiVariableMap.java
if (var.isReceiverIdentical(receiver)) {
return var;
}
В isReceiverIdentical этот метод просто сравнивает приемник с приемником BiVariable usgin '=='.
Является ли эта ошибка jruby? Или мне нужно что-то сделать для этого? Если вам нужна дополнительная информация по этой проблеме, plz прокомментировать это!
Я получил ScriptEngine (двигатель) от ScriptEngineManager и установить некоторый экземпляр Java и метод, как этого
engine.put("this", console);
engine.eval("$command = $this.java_method :command, [java.lang.String]");
вот мой тест рубин код. result
и tab
- объект 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
Я видел аналогичные вопросы NPE с JRuby в 'BiVariableMap' ... сделал [PR] (https://github.com/jruby/jruby/pull/2456), чтобы зафиксировать его , Я на 95% уверен, что ваше дело также охвачено ... если вы можете создать свой собственный * jruby.jar * и убедитесь, что это было бы полезно (прокомментируйте PR с подробной информацией или обратитесь к нему из проблемы, если вы около, чтобы открыть новый) – kares
@kares благодарю вас за комментарий. Но ... когда я построил jruby.jar с вашими изменениями в ветке встроенной очистки, он все равно бросает NPE. В любом случае, я проверю его больше. – parivana
в этом случае обязательно отобразите код (один сниппет) для воспроизведения ... – kares