1

我无法使用主类和 ant 1.8.4 使用 Oracle JVM 的 JDK7U10 或 JDK6U32 运行“hello world”rhino 程序。我收到此错误:

ScriptEngineManager providers.next(): javax.script.ScriptEngineFactory: Provider com.sun.script.javascript.RhinoScriptEngineFactory not found
...
[java] Caused by: java.lang.NullPointerException
[java]     at com.Test.main(Test.java:14)

我的代码是从文档中复制的,engine.eval 发生错误:

package com;

import javax.script.*;

public class Test {

    public static void main(String[] args) throws Exception {

        // create a script engine manager
        ScriptEngineManager factory = new ScriptEngineManager();
        // create a JavaScript engine
        ScriptEngine engine = factory.getEngineByName("JavaScript");
        // evaluate JavaScript code from String
        engine.eval("print('Hello, World')");

    }
}

我的 lib 目录中有 rhino 提供的 js.jar 以及我可能需要的 ant 必需包 bsf.jar。请帮忙。

4

2 回答 2

3

我知道这篇文章很旧,但您可以尝试使用以下方法初始化 ScriptEngineManager:

ScriptEngineManager manager = new ScriptEngineManager(null);
于 2015-06-04T12:31:42.260 回答
0

您可以使用这种形式的代码来发现 JRE 可见的引擎:

for (ScriptEngineFactory sef : new ScriptEngineManager().getEngineFactories()) {
  System.out.println(sef);
  System.out.append("  Engine: ")
      .append(sef.getEngineName())
      .append(" ")
      .println(sef.getEngineVersion());
  System.out.append("  Language: ")
      .append(sef.getLanguageName())
      .append(" ")
      .println(sef.getLanguageVersion());
  System.out.append("  Names: ")
      .println(sef.getNames());
}

我不认为 Rhino 对 JRE 的javax.scriptAPI 是自动可见的(Oracle 的 JDK 中附带的版本除外。)

于 2013-01-17T15:26:38.277 回答