javascript - 使用 nashorn 从 JavaScript 引用现有 Java 对象

标签 javascript java nashorn

我知道我可以创建 Java 对象并使用以下代码调用它们的方法:

ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
            engine.eval("var SomeJavaClass = " + "Java.type('somepackage.SomeJavaClass');" +
"var x = new SomeJavaClass();" +
"x.doSomething();"

但是是否可以使用 nashorn 调用已经存在的 Java 对象的方法?

最佳答案

是的。使用ScriptEngineManager.getBindings().put(String name, Object value)将现有对象放入引擎范围内。

示例:

import javax.script.*;

public class NashornVariables {
    public static class SomeJavaClass {
        public void doSomething() {
            System.out.println("I did something!");
        }
    }

    public static void main(String[] args) throws ScriptException {
        ScriptEngineManager manager = new ScriptEngineManager();
        manager.getBindings().put("x", new SomeJavaClass());
        ScriptEngine engine = manager.getEngineByName("nashorn");
        engine.eval(
            "x.doSomething();"
        );
    }
}

结果:

$ javac NashornVariables.java; java NashornVariables
I did something!

关于javascript - 使用 nashorn 从 JavaScript 引用现有 Java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53467214/

相关文章:

javascript - JDK 8 Nashorn Javascript 引擎限制

javascript - CSS Slanding Div 边缘在图像上

java - 迭代嵌入链接时出现 StaleElementReferenceException

java - 如何将复杂的java对象(嵌套映射和列表)从一个apache nifi处理器传递到另一个?

java - 应用程序无法启动 Activity 组件信息(Android)

java - 如何从 Javascript (Java 1.8) 访问 Java 枚举

javascript - 如何修复未捕获的类型错误 : Cannot read property 'settings' of undefined

javascript - 如何将文档高度设置为 iframe 任何人都可以建议吗?

javascript - 为日历插件调用相同的 javascript 时出现问题

javascript - 如何将 Javascript native 类型从 Java 传递给 Nashorn 对象?