【问题标题】:How can I use JavaScript in Java? [closed]如何在 Java 中使用 JavaScript? [关闭]
【发布时间】:2011-11-21 05:18:59
【问题描述】:

我想构建一个小产品,我想在其中提供一种功能,用户可以在其中编写一种 JavaScript 脚本语言。

并且还可以通过 JavaScript 构建对象并在其上调用方法。

这有什么框架吗?

【问题讨论】:

  • @Felix:尽管 Node.js 很酷,但它与 Java 或 Web 浏览器无关,对吧?
  • @maerics 是的,但它可以提供一个用于修补的控制台。它可以运行脚本。并且 OP 没有提到任何关于网络浏览器的内容:)
  • @Felix 那么“每个浏览器都有的 JavaScript 控制台的想法是不相关的,并且 node.js 不是 Java,所以......似乎也不是很有帮助。跨度>
  • Java 8 提供了一个新的 JavaScript 引擎 Nashorn 来替代 Rhino。请参阅 Nashorn 博客 blogs.oracle.com/nashorn
  • @RichardChambers 很高兴知道谢谢理查德。将其作为答案,以便对用户有用

标签: java javascript apache object


【解决方案1】:

Rhino 就是你要找的。​​p>

Rhino 是完全编写的 JavaScript 的开源实现 在爪哇。它通常嵌入到 Java 应用程序中以提供 为最终用户编写脚本。

更新: 现在 Nashorn 是性能更高的 Java JavaScript 引擎,可用于 jdk8。

【讨论】:

【解决方案2】:

Java 从版本 6 开始包含 scripting language extension package

请参阅Rhino project documentation for embedding a JavaScript interpreter in Java

[编辑]

下面是一个小例子,说明如何将 Java 对象暴露给已解释的脚本:

public class JS {
  public static void main(String args[]) throws Exception {
    ScriptEngine js = new ScriptEngineManager().getEngineByName("javascript");
    Bindings bindings = js.getBindings(ScriptContext.ENGINE_SCOPE);
    bindings.put("stdout", System.out);
    js.eval("stdout.println(Math.cos(Math.PI));");
    // Prints "-1.0" to the standard output stream.
  }
}

【讨论】:

【解决方案3】:

你可以使用ScriptEngine,例如:

public class Main { public static void main(String[] args) { StringBuffer javascript = null; ScriptEngine runtime = null; try { runtime = new ScriptEngineManager().getEngineByName("javascript"); javascript = new StringBuffer(); javascript.append("1 + 1"); double result = (Double) runtime.eval(javascript.toString()); System.out.println("Result: " + result); } catch (Exception ex) { System.out.println(ex.getMessage()); } } }

【讨论】:

  • 这就像进行 javascript 评估并在 java 中获得结果。如果我想直接在 javascript 中使用 java 对象怎么办? .....
  • 阅读文档——另一个答案中提供的犀牛链接在前几段中讨论了这一点。
【解决方案4】:

我只是想为这个问题回答一些新问题 - J2V8

作者 Ian Bull 说“Rhino 和 Nashorn 是两种常见的 JavaScript 运行时,但它们在许多方面都不能满足我们的要求:

都不支持“原语”。与这些平台的所有交互都需要包装类,例如 Integer、Double 或 Boolean。 Android 不支持 Nashorn。 Android 不支持 Rhino 编译器优化。 两种引擎都不支持在 Android 上进行远程调试。""

Highly Efficient Java & JavaScript Integration

Github link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-13
    • 2013-04-22
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2013-10-08
    相关资源
    最近更新 更多