Java8 Nashorn - ReferenceError:未定义“eu”

时间:2014-04-16 13:30:11

标签: java javascript java-8 nashorn

我正在尝试从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 ...包中,所以我对此感到有些惊讶。有什么我做错了吗?

3 个答案:

答案 0 :(得分:2)

如果您通过Packages对象访问它,我认为它会起作用。

例如:

Packages.eu.wansdyke.carbon.hooks

对于引用来自:Nashorn Docs

答案 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运行时的全局变量值)。静态方法似乎不可用,所以我使用了一个实例,并从中调用了一个静态方法。