Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中使用JavaScript?_Java_Javascript_Apache_Object - Fatal编程技术网

如何在Java中使用JavaScript?

如何在Java中使用JavaScript?,java,javascript,apache,object,Java,Javascript,Apache,Object,我想构建一个小产品,我想在其中提供一种功能,用户可以在其中编写一种类似JavaScript的脚本语言 还可以使用JavaScript构建对象并对其调用方法 这有什么框架吗?是您想要的 Rhino是完全由JavaScript编写的开源实现 在Java中。它通常嵌入到Java应用程序中,以提供 为最终用户编写脚本 更新: 现在,jdk8提供了更高性能的Java JavaScript引擎 Java包含一个从版本6开始的版本 看 [编辑] 下面是一个小示例,说明如何将Java对象公开给解释脚本: 公共类

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

还可以使用JavaScript构建对象并对其调用方法

这有什么框架吗?

是您想要的

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

更新: 现在,jdk8提供了更高性能的Java JavaScript引擎

Java包含一个从版本6开始的版本

[编辑]

下面是一个小示例,说明如何将Java对象公开给解释脚本:

公共类JS{
公共静态void main(字符串args[])引发异常{
ScriptEngine js=new ScriptEngineManager().getEngineByName(“javascript”);
Bindings Bindings=js.getBindings(ScriptContext.ENGINE_范围);
bindings.put(“stdout”,System.out);
js.eval(“stdout.println(Math.cos(Math.PI));”;
//将“-1.0”打印到标准输出流。
}
}
您可以使用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());
        }
    }
}

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

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

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


使用rhino,我可以在java对象中运行最基本的脚本构造……是的,你可以。请看这里:@Felix:Node.js虽然很酷,但它与java或web浏览器无关,对吗?@maerics是的,但它可以提供一个控制台进行修补。它还可以运行脚本。OP没有提到任何关于web浏览器的内容:)@Felix然后,“每个浏览器都拥有的JavaScript控制台是不相关的,node.js不是Java,所以。。。Java8提供了一个新的JavaScript引擎Nashorn来取代Rhino。查看纳肖恩博客@RichardChambers很高兴知道谢谢richard。把它作为一个答案,这样它就可以对用户有用了+1也可以看到这个小问题。这就像在java中进行javascript评估并得到结果一样。如果我想在javascript中直接使用java对象呢。。。。。阅读文档——另一个答案中提供的Rhino链接在前几段讨论了这一点。