2

我正在尝试从 Nashorn 执行的 JavaScript 调用类的静态方法:

var hooks = new JavaImporter(eu.wansdyke.carbon.hooks);
带(钩子){
  Archiver.archive(bucket, key, existingValue, 1);
}

不幸的是,我收到了这个错误:

javax.script.ScriptException: ReferenceError: "eu" is not defined in at line number 2

调用 Nashorn 的类位于 eu.wansdyke... 包中,所以我对此感到有些惊讶。有什么我做错了吗?

4

3 回答 3

3

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

例如:

Packages.eu.wansdyke.carbon.hooks

对于参考拉它从:Nashorn Docs

于 2014-07-03T21:56:44.260 回答
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);
于 2014-04-23T16:09:52.873 回答
0

比令人满意的答案更多的解决方法,但我已经能够使用 void javax.script.ScriptEngine.put(String key, Object value) 将 Archiver 类的实例设置为 JS 运行时上的全局变量。当时似乎没有静态方法可用,因此我使用了一个实例并从中调用了一个静态方法。

于 2014-04-16T17:21:17.430 回答