Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.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 7上运行符合ECMAScript 5的javascript_Javascript_Java_Java 7_Ecmascript 5 - Fatal编程技术网

在Java 7上运行符合ECMAScript 5的javascript

在Java 7上运行符合ECMAScript 5的javascript,javascript,java,java-7,ecmascript-5,Javascript,Java,Java 7,Ecmascript 5,我想使用Java7的嵌入式javascript引擎运行javascript。我试图运行的代码是符合ECMAScript 5的,这应该不是问题,因为嵌入式Rhino的版本是支持它的。但是,运行以下代码段不起作用: ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("JavaScript"); engine.eval("v

我想使用Java7的嵌入式javascript引擎运行javascript。我试图运行的代码是符合ECMAScript 5的,这应该不是问题,因为嵌入式Rhino的版本是支持它的。但是,运行以下代码段不起作用:

    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptEngine engine = manager.getEngineByName("JavaScript");
    engine.eval("var char = 'a';");
它失败,错误为
缺少变量名
,这表明
char
是保留关键字。但是,ECMAScript 5中不再保留
字符
,因此我完全感到困惑。问题是哪个javascript版本应该与Java7中的嵌入式Rhino一起工作


我使用的是java
1.7.0_80
,引擎报告的语言版本是
1.8
,引擎版本是
1.7 release 3 PRERELEASE

正如@realpoint所指出的,OpenJDK 7的嵌入式脚本引擎(
Rhino 1.7 r4
)在运行上述javascript代码段时没有问题。似乎
rhino1.7r3
无法运行它,因此使用oraclejava7运行它需要
1.7r4
(或更高版本)的外部Rhino,可以从下载。为了完整起见,问题中基于Rhino自己API的java等效代码如下所示:

import org.mozilla.javascript.Context;
import org.mozilla.javascript.ScriptableObject;

public class Rhino {

    public static void main(String[] args) throws Exception {
        Context context = Context.enter();
        try {
            ScriptableObject scope = context.initStandardObjects();
            context.evaluateString(scope, "var char = 'a'", "test", 1, null);
        } finally {
             Context.exit();
        }
   }
}

请注意,导入声明很重要,因为相同的类可以捆绑在不同包中的JDK中:

import sun.org.mozilla.javascript.internal.Context;
import sun.org.mozilla.javascript.internal.ScriptableObject;

导入它们会导致将嵌入式引擎与Rhino的API一起使用,这将不起作用。

在Java 7(OpenJDK,Linux)中,该脚本对我来说不会失败。它工作得很好。@realponsign实际上,OpenJDK似乎包含
rhino1.7R4
。因为我不能迁移到OpenJDK,所以我将尝试使用
Rhino1.7R4
作为外部jar。无论如何,谢谢你发现了这一点。