Java脚本引擎,将引用动态传递给回调时获取ReferenceError

Java脚本引擎,将引用动态传递给回调时获取ReferenceError,java,nashorn,jsr223,Java,Nashorn,Jsr223,我正在使用JDK8 Nashorn脚本引擎。我的脚本在Java类中注册回调,如下所示: stream.create().input(".env/router-memory-list/router1").management().onChange(function(){ print("onChange: "+input.current()); }); 回调函数中引用的输入在执行回调之前从Java线程中设置,并在执行回调之后删除(ctx.engineScope是脚本的绑定对象): 它通常工

我正在使用JDK8 Nashorn脚本引擎。我的脚本在Java类中注册回调,如下所示:

stream.create().input(".env/router-memory-list/router1").management().onChange(function(){
    print("onChange: "+input.current());
});
回调函数中引用的
输入
在执行回调之前从Java线程中设置,并在执行回调之后删除(
ctx.engineScope
是脚本的绑定对象):

它通常工作正常,但我在执行回调时偶尔会遇到这种错误:

<eval>:15 ReferenceError: "input" is not defined
    at jdk.nashorn.internal.runtime.ECMAErrors.error(ECMAErrors.java:57)
    at jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:319)
    at jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:291)
    at jdk.nashorn.internal.objects.Global.__noSuchProperty__(Global.java:1432)
    at jdk.nashorn.internal.scripts.Script$Recompilation$4$383$\^eval\_.L:13(<eval>:15)
    at jdk.nashorn.javaadapters.java.lang.Runnable.run(Unknown Source)
    at com.swiftmq.impl.streams.comp.io.ManagementInput.executeCallback(ManagementInput.java:105)
    at com.swiftmq.impl.streams.processor.StreamProcessor.visit(StreamProcessor.java:92)
    at com.swiftmq.impl.streams.processor.po.POMgmtMessage.accept(POMgmtMessage.java:28)
    at com.swiftmq.tools.pipeline.PipelineQueue.process(PipelineQueue.java:35)
    at com.swiftmq.tools.queue.SingleProcessorQueue.dequeue(SingleProcessorQueue.java:135)
    at com.swiftmq.tools.pipeline.PipelineQueue$QueueProcessor.run(PipelineQueue.java:69)
    at com.swiftmq.impl.threadpool.standard.PoolThread.run(Unknown Source) 
<eval>:15 ReferenceError: "input" is not defined
    at jdk.nashorn.internal.runtime.ECMAErrors.error(ECMAErrors.java:57)
    at jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:319)
    at jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:291)
    at jdk.nashorn.internal.objects.Global.__noSuchProperty__(Global.java:1432)
    at jdk.nashorn.internal.scripts.Script$Recompilation$4$383$\^eval\_.L:13(<eval>:15)
    at jdk.nashorn.javaadapters.java.lang.Runnable.run(Unknown Source)
    at com.swiftmq.impl.streams.comp.io.ManagementInput.executeCallback(ManagementInput.java:105)
    at com.swiftmq.impl.streams.processor.StreamProcessor.visit(StreamProcessor.java:92)
    at com.swiftmq.impl.streams.processor.po.POMgmtMessage.accept(POMgmtMessage.java:28)
    at com.swiftmq.tools.pipeline.PipelineQueue.process(PipelineQueue.java:35)
    at com.swiftmq.tools.queue.SingleProcessorQueue.dequeue(SingleProcessorQueue.java:135)
    at com.swiftmq.tools.pipeline.PipelineQueue$QueueProcessor.run(PipelineQueue.java:69)
    at com.swiftmq.impl.threadpool.standard.PoolThread.run(Unknown Source) 
    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptEngine engine = manager.getEngineByName((String) entity.getProperty("script-language").getValue());
    if (engine == null)
        throw new Exception("Engine for script-language '" + entity.getProperty("script-language").getValue() + "' not found!");
    ScriptContext newContext = new SimpleScriptContext();
    ctx.engineScope = newContext.getBindings(ScriptContext.ENGINE_SCOPE);