标签: rhino

在Android上使用Rhino的问题

我正在尝试在Android的Java应用程序中使用Mozilla Rhino来评估一些JavaScript.我正在使用Eclipse + ADT插件.

首先,我尝试从Mozilla的网站下载Rhino .jar文件,并将其作为Eclipse中的库添加到项目中.Eclipse认识到它很好并编译了应用程序.但是,在运行它时,我在调用时会遇到异常Context.evaluateReader()(请参阅下面的堆栈跟踪).

然后我尝试将Rhino源代码添加为Eclipse中的单独Android项目,将其标记为库并在我的项目中引用它,这足以让Eclipse将其编译,但导致了同样的错误.

这是我得到的堆栈跟踪(java.lang.UnsupportedOperationException: can't load this type of class file)

Thread [<7> Thread-8] (Suspended (exception UnsupportedOperationException)) 
    DefiningClassLoader(ClassLoader).defineClass(String, byte[], int, int, ProtectionDomain) line: 338  
    DefiningClassLoader.defineClass(String, byte[]) line: 62    
    Codegen.defineClass(Object, Object) line: 159   
    Codegen.createScriptObject(Object, Object) line: 114    
    Context.compileImpl(Scriptable, Reader, String, String, int, Object, boolean, Evaluator, ErrorReporter) line: 2440  
    Context.compileReader(Reader, String, int, Object) line: 1326   
    Context.compileReader(Scriptable, Reader, String, int, Object) line: 1298   
    Context.evaluateReader(Scriptable, Reader, String, int, Object) line: 1137  
    TimetableProcessor.evaluate(InputStream, String, String[]) …
Run Code Online (Sandbox Code Playgroud)

java android rhino

18
推荐指数
2
解决办法
8788
查看次数

警告:node.js检测失败,sbt将使用基于Rhino的Trireme JavaScript引擎

我是Play框架的新手.请解释下面警告的含义.

警告:node.js检测失败,sbt将使用基于Rhino的Trireme JavaScript引擎来运行JavaScript资源编译,这在某些情况下可能比使用node.js慢几个数量级.

我不想要任何使我的应用程序变慢的东西所以请建议我是否应该将JS Engine更改为Node.js,但我的PlayFramework项目在服务器端使用Java.

rhino node.js playframework

18
推荐指数
2
解决办法
6393
查看次数

如何将Rhino-JavaScript数组转换为Java-Arrays

我有以下内容:

ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");
jsEngine.eval("function getArray() {return [1,2,3,4,5];};");
Object result = jsEngine.eval("getArray();");
Run Code Online (Sandbox Code Playgroud)

如何将sun.org.mozilla.javascript.internal.NativeArray类型的结果对象转换为相应的java数组?可以告诉我一个工作代码示例吗?它应该适用于String和Integer数组.另外,知道在哪里查找rhino引擎和java之间的其他数据类型转换会很棒.

顺便说一句,我知道这个页面,但我真的在寻找一个有效的代码示例.

java scripting rhino jsr223

17
推荐指数
3
解决办法
2万
查看次数

如何异步运行javascript函数,而不使用setTimeout?

它是服务器端的Javascript(rhino引擎),所以setTimeout不可用.如何异步运行一个函数?

javascript parallel-processing rhino

17
推荐指数
2
解决办法
8485
查看次数

Rhino和并发访问javax.script.ScriptEngine

我正在通过javax.scriptAPI 使用Rhino 1.6r2 .我知道Rhino引擎声称是MULTITHREADED: "引擎实现是内部线程安全的,并且脚本可以并发执行,尽管脚本执行对一个线程的影响可能对其他线程上的脚本可见."

我想知道的是,在什么条件下,一个脚本执行的效果对另一个可见?在我的代码中,我有时会重用一个ScriptEngine对象,但是对于每次执行,我都会创建一个new SimpleBindings并将其传递给它eval(String, Bindings).有了这种安排,内部状态是否有任何方式可以从一个执行泄漏到另一个执行?如果是这样,怎么样?

有一个非常丰富的答案在这里,但它并不十分告诉我什么,我需要知道的.

javascript java rhino

17
推荐指数
1
解决办法
4562
查看次数

Rhino:Java数字的行为与Javascript数字不同

我在我的Javascript程序中可以访问这个Java类的实例

public class ContentProvider {
  public Object c(int n) {
    switch (n) {
      case 1: return 1.1;
      case 2: return 2.2;
      case 3: return 3.3;
      case 4: return "4";
      case 5: return new java.util.Date();
    }
    return null;
  }
}
Run Code Online (Sandbox Code Playgroud)

这是main()中的代码:

ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("JavaScript");
engine.put("ctx", new ContentProvider());

res = engine.eval("ctx.c(1)");

System.out.printf("rhino:> %s (%s)%n"
        , res
        , res != null ? res.getClass().getName() : null
);
Run Code Online (Sandbox Code Playgroud)

简单的表达式ctx.c(1)打印:

rhino:> 1.1 (java.lang.Double)
Run Code Online (Sandbox Code Playgroud)

现在这里发生的事情是ctx.c(1) + ctx.c(2): …

javascript java rhino

17
推荐指数
1
解决办法
1161
查看次数

是否有可能使Node.js使用Rhino作为Javascript引擎?

我在我的网络应用程序上使用Node.js进行多项工作,到目前为止还可以.

但是Node.js使用Google的V8作为默认的Javascript引擎(JSE),V8在x86和ARM指令集架构(ISA)上运行.

现在我有一台PPC处理器Mac计算机,我想运行Node.js.

为此,我建议使用Rhino + OpenJDK Shark虚拟机+低级虚拟机(LLVM)作为JIT编译器.目前,这看起来像是在PPC ISA上运行Node.js最适用的方式.或者,有更好的方法吗?

你能预先告诉我是否可以让Node.js与Rhino一起工作?顺便说一句,Node.js是用C++编写的,我确实有C++编程经验,即如果必须,我可能会尝试重新编辑Node.js的代码.

谢谢.

v8 powerpc rhino llvm node.js

15
推荐指数
2
解决办法
9285
查看次数

使用Rhino解释Java中的JavaScript:暂停/恢复脚本

我正在使用JDK的javax.script.*包.具体来说,我正在使用JavaScript引擎,根据我的阅读,它似乎基于Mozilla开发的名为Rhino的JavaScript-in-Java解释器.

我希望完成的是基本上让我的JavaScript能够在代码中的某个点"暂停"自己(比如说,在函数调用的中途),并且只有在Java允许它执行时才会自行恢复.

为了说明我的意思,想象一下这个JavaScript代码:

function myJSFunction() {
    print("Hello ");
    mysteriousPauseFunction(); // this is the part I'm wondering about.  basically, the script should break here and resume later at Java's discretion...
    // upon reaching this comment, we know now that Java has told JavaScript that it's okay to resume, so the next line will now be executed...
    print("world");
}
Run Code Online (Sandbox Code Playgroud)

如果"暂停"/"破坏"部分涉及绑定Java函数并将其传递给当前ScriptEngine或其他任何东西,那对我来说很酷.我认为这可能涉及到:从Java中暂停JavaScript.

我做了一些谷歌搜索,发现这里的关键字似乎是"延续".据我所知,Rhino只支持解释模式下的延续(与编译模式相比),我看到它是通过将"context"设置为-2来实现的.由于内置的​​JDK ScriptEngine似乎没有提及有关上下文的任何内容(或者我可能缺少它),这是否意味着我必须直接下载并使用Mozilla的Rhino库?

我需要实现这个目标吗?我已经找到关于Rhino延续的有用教程,但在阅读完之后,我不能100%确定这是否能够完成我上面描述的内容.如果这我正在寻找的,那么我的后续问题是关于所提到的"序列化":这是否意味着当我恢复我的脚本时,所有变量都将被取消,除非我将它们序列化?

更新:看起来这可能与Rhino有关.这是我到目前为止在JavaScript中所拥有的内容; 在代码之后,我将解释它的作用......

var end = new Continuation();

function myJSFunction()
{
    print("Hello "); …
Run Code Online (Sandbox Code Playgroud)

javascript java scripting rhino

15
推荐指数
1
解决办法
2883
查看次数

ReferenceError:未定义"alert"

我试图从java代码调用java脚本函数.

这是我的Java代码

    public static void main(String[] args) throws FileNotFoundException {
    try {
        /**
         * To call a anonymous function from java script file
         */
        ScriptEngine engine = new ScriptEngineManager()
                .getEngineByName("javascript");
        FileReader fr = new FileReader("src/js/MySpec.js");
        engine.eval(fr);

    } catch (ScriptException scrEx) {
        scrEx.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的java脚本文件:

(function() {
  alert("Hello World !!!");
})();
Run Code Online (Sandbox Code Playgroud)

但是当我运行驱动程序类的main方法时,它给出了如下错误:

Exception in thread "main" javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "alert" is not defined. (<Unknown source>#2) in <Unknown source> at line number 2
at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:110)
at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:232)
at Java6RhinoRunner.load(Java6RhinoRunner.java:42)
at Java6RhinoRunner.main(Java6RhinoRunner.java:12) …
Run Code Online (Sandbox Code Playgroud)

javascript java rhino

15
推荐指数
1
解决办法
3万
查看次数

如何将Java Map转换为基本的Javascript对象?

我开始在Java 6中使用动态rhinoscript功能,供更有可能了解Javascript而不是Java的客户使用.

将Map(关联数组,javascript obj,无论如何)传递给Javascript的最佳方法是什么,以便脚本编写者可以使用标准的Javascript点表示法来访问值?

我目前正在将java.util.Map值传递给脚本,但是脚本编写者必须编写"map.get('mykey')"而不是"map.mykey".

基本上,我想做与此问题相反的事情.

javascript java rhino

14
推荐指数
3
解决办法
3万
查看次数