【问题标题】:Refer to existing Java objects from JavaScript using nashorn使用 nashorn 从 JavaScript 引用现有的 Java 对象
【发布时间】:2019-04-27 06:39:59
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript java nashorn


    【解决方案1】:

    是的。使用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!
    

    【讨论】:

      猜你喜欢
      • 2017-10-11
      • 1970-01-01
      • 2015-03-03
      • 1970-01-01
      • 1970-01-01
      • 2017-07-09
      • 1970-01-01
      • 1970-01-01
      • 2017-01-06
      相关资源
      最近更新 更多