找不到RhinoScriptEngineFactory

时间:2013-01-07 16:04:01

标签: java rhino scriptengine

我无法跑步"你好世界"使用Oracle JVM的JDK7U10或JDK6U32的rhino程序,使用主类和ant 1.8.4。我收到了这个错误:

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。请帮忙。

2 个答案:

答案 0 :(得分:3)

我知道这篇文章已经过时但您可以尝试使用以下命令初始化ScriptEngineManager:

ScriptEngineManager manager = new ScriptEngineManager(null);

答案 1 :(得分: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.script API(Oracle JDK中提供的版本除外)。