当前位置: 首页 > 面试题库 >

尝试使用Rhino,getEngineByName(“ JavaScript”)在OpenJDK 7中返回null

沙海
2023-03-14
问题内容

当我运行以下代码时,将engine变量设置为null使用OpenJDK 7(java-7-openjdk-i386)时的值。

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class TestRhino {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ScriptEngineManager factory = new ScriptEngineManager();
        ScriptEngine engine = factory.getEngineByName("JavaScript");
        try {
            System.out.println(engine.eval("1+1"));
        } catch (ScriptException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

java-6-openjdk与Oracle 一起使用可以很好地运行jre1.7.0。知道为什么吗?

我正在使用Ubuntu 11.10。所有JVM都安装在下/usr/lib/jvm


问题答案:

[更新:这是一个错误,现已修复
]

简而言之,这可能是一个错误。

Rhino支持类(com.sun.script.javascript.*)未被编译为rt.jar1(尽管我发现这是Sun和Mozilla之间的合并问题,而且我知道存在命名空间问题,但它们确实存在于OpenJDK
7源代码中,并在makefile中进行了引用) ,他们正在从失踪resources.jarMETA-INF/services为好。OpenJDK
6并非如此,它具有以下内容META-INF/services/javax.script.ScriptEngineFactory

#script engines supported

com.sun.script.javascript.RhinoScriptEngineFactory #javascript

尽管这可能是一个发行决定2,但没有书面理由,因此我在Ubuntu OpenJDK
7启动板中提交了错误#982501。我得到一个答案会更好。

1根据此线程,

我在某处听说Mozilla出于未知的原因不接受Sun对其主干分支的更改,但这是在开源之前进行的。

还存在一些冲突问题,这些冲突问题是由JRE版本和BYOR(自带犀牛)版本相互冲突引起的(例如,Ubuntu OpenJDK
7启动板上的错误#255149)。但是,该源代码位于OpenJDK
7
源代码中,并在makefile中提到,而上述线程中提到的BSD端口具有相同的源代码。

2根据此Sun
bug#6876736,这是基于发行版的决策:

犀牛源代码不是OpenJDK的一部分,要由发行版来添加。

与他们已经签入OpenJDK的事实有所不同,但是我认为想法是Rhino不在JDK规范中。



 类似资料:
  • 我在Java中有一个与MySQL连接的多类项目,我可以与这个SQL数据库建立连接,但当我试图将它读入数组时,它得到的是废话,而不是所请求的信息。我做错了什么? 它在sql定义下面出现了一条弯曲的线条,说它们从来没有被读取过,但我就是不明白为什么会这样!它构建得很好,可以看到数据库中有行,但它返回以下内容: 显示“java2assignment3.dvd@5e0010bc”和“java2assign

  • 问题内容: 我在Java中具有JSON序列化对象的字符串表示形式,例如。我如何解析并将其返回到JavaScript上下文,就像在JS中一样?谢谢。 问题答案: Rhino的最新版本只有四个arg,第四个不能为null。为了解决这个问题,您必须创建一个实现org.mozilla.javascript.Callable的简单类: 然后可以像这样调用NativeJSON.parse:

  • 我的目的是在AdaptOpenJDK 8 VM中提供一个JSR-223 javascript引擎。 所以我想用已经熟悉的犀牛。 并指定在那里下载jsr-223脚本引擎包装器。这里: https://java.net/projects/scripting ,但是这个链接已经死了。 我在哪里可以找到Rhino的JSR-223包装器? 或者可能有更好的替代方案,如JSR-223 JavaScript-E

  • 我有一个返回< code>List的方法。现在我想知道如何正确放置< code>try/catch块。如果我将< code>return语句放在< code>try中,我会得到错误 并非所有代码路径都返回值 如果我放置在之后(就像我目前所做的那样),即使在之后,它也会返回。那么最好的方法应该是什么? 方法如下:

  • 首先我知道这是一个重复的问题。但我已经搜索并尝试从谷歌上列出的stackoverflow到quora,但仍然无法解决Get方法仍然返回null的问题。 这是我的类登录模型。com包下的java。你好模型 这是我的登录视图。com包下的java。你好看法 我想从menuView调用我的用户名。com包下的java。你好登录成功后查看 根据我在loginModel中调用Get方法时的问题,messag

  • 问题内容: 我们的Java应用程序的一部分需要运行由非开发人员编写的javascript。这些非开发人员正在使用JavaScript进行数据格式化。(主要是简单的逻辑和字符串连接)。 我的问题是如何设置这些脚本的执行,以确保脚本错误不会对应用程序的其余部分产生重大负面影响。 需要防范无限循环 防止产生新线程。 限制访问服务和环境 文件系统(示例:如果心怀不满的脚本编写者决定删除文件) 数据库(用同