我正在尝试从Nashorn执行的JavaScript调用类的静态方法:
var hooks = new JavaImporter(eu.wansdyke.carbon.hooks); with (hooks) { Archiver.archive(bucket, key, existingValue, 1); }
不幸的是我收到了这个错误:
javax.script.ScriptException: ReferenceError: "eu" is not defined in at line number 2
调用Nashorn的类是在eu.wansdyke ...包中,所以我对此感到有些惊讶。有什么我做错了吗?
答案 0 :(得分:2)
答案 1 :(得分:1)
问题的原因是Nashorn加载了java.*
,javax.*
,javafx.*
,com.*
,edu.*
和org.*
数据包层次结构进入全球范围,但不是eu.*
。这意味着您无法直接引用该包。
但您应该可以使用eu.*
从Java.type(String)
层次结构中导入单个类。
var Archiver = Java.type("eu.wansdyke.carbon.hooks.Archiver");
Archiver.archive(bucket, key, existingValue, 1);
答案 2 :(得分:0)
更多的解决方法而不是令人满意的答案,但我已经能够使用void javax.script.ScriptEngine.put(String key,Object)将Archiver类的实例设置为JS运行时的全局变量值)。静态方法似乎不可用,所以我使用了一个实例,并从中调用了一个静态方法。