`

一个最简单的Rhino的例子

 
阅读更多

JSFunction.java  
  
package com.milenfan.rhino;  
  
import org.mozilla.javascript.Function;  
  
public class JSFunction // extends ScriptableObject  
{  
    private String name;  
  
    private Function handle;  
  
    public void setHandler(Function func) {  
        this.handle = func;  
    }  
  
    public Function getHandler() {  
        return this.handle;  
    }  
  
    public JSFunction(String s) {  
        this.name = s;  
    }  
  
    public static void print(String s) {  
        System.out.println(s);  
    }  
  
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
}  

 

 

var swingNames = JavaImporter();  
  
swingNames.importPackage(Packages.java.lang);  
swingNames.importPackage(Packages.com.milenfan.rhino);  
  
obj = {  
    a : 1,  
    b : [ 'x', 'y' ]  
}  
next = isPrime  
flag = isPrime(5)  
with (swingNames) {  
    System.out.println("in javascript");  
    JSFunction.print("in JSFunction");  
    jsFunction = new JSFunction("caizhenyao");  
    var name = jsFunction.getName();  
    System.out.println("get name from java source: " + name);  
    jsFunction.setHandler(log);  
}  
  
java.lang.System.out.println("not use swingNames");  
function isPrime(num) {  
    java.lang.System.out.println("in isPrime(num)");  
    if (num <= 1) {  
        java.lang.System.out.println("Please enter a positive integer >= 2.")  
        return false  
    }  
  
    var prime = true  
    var sqrRoot = Math.round(Math.sqrt(num))  
  
    for ( var n = 2; prime & n <= sqrRoot; ++n) {  
        prime = (num % n != 0)  
    }  
  
    return prime  
}  
  
function log(msg) {  
    java.lang.System.out.println("in function log: " + msg);  
}  

 

package com.milenfan.rhino;  
  
import java.io.FileReader;  
import java.io.LineNumberReader;  
  
import org.mozilla.javascript.Context;  
import org.mozilla.javascript.Function;  
import org.mozilla.javascript.Scriptable;  
  
public class JSExploration {  
    private Context cx;  
  
    private Scriptable scope;  
  
    public JSExploration() {  
        this.cx = Context.enter();  
        this.scope = cx.initStandardObjects();  
    }  
  
    public Object runJavaScript(String filename) {  
        String jsContent = this.getJsContent(filename);  
        Object result = cx.evaluateString(scope, jsContent, filename, 1, null);  
        return result;  
    }  
  
    private String getJsContent(String filename) {  
        LineNumberReader reader;  
        try {  
            reader = new LineNumberReader(new FileReader(filename));  
            String s = null;  
            StringBuffer sb = new StringBuffer();  
            while ((s = reader.readLine()) != null) {  
                sb.append(s).append("\n");  
            }  
            return sb.toString();  
        } catch (Exception e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
            return null;  
        }  
    }  
  
    public Scriptable getScope() {  
        return scope;  
    }  
  
    public static void main(String[] args) {  
        String filename = "D:\\workplace\\WebProject\\src\\com\\milenfan\\rhino\\jsmap.js";  
        JSExploration jsExploration = new JSExploration();  
        Object result = jsExploration.runJavaScript(filename);  
        Scriptable scope = jsExploration.getScope();  
        Scriptable obj = (Scriptable) scope.get("obj", scope);  
        System.out.println("obj.a == " + obj.get("a", obj));  
        Scriptable b = (Scriptable) obj.get("b", obj);  
        System.out.println("b[0] == " + b.get(0, b));  
        Boolean flag = (Boolean) scope.get("flag", scope);  
        System.out.println(flag);  
  
        Scriptable myobj = (Scriptable) scope.get("obj", scope);  
        Boolean myflag = (Boolean) scope.get("flag", scope);  
        System.out.println(myflag);  
  
        Scriptable jsFunction = (Scriptable) scope.get("jsFunction", scope);  
        Function fc = (Function) jsFunction.get("handler", jsFunction);  
        Object isPrime = fc.call(Context.getCurrentContext(), jsFunction, fc,  
                new Object[] { "this is my test" });  
    }  
}  
 
分享到:
评论

相关推荐

    python for rhino教程

    Rhinoceros,通常称为Rhino,是一个三维建模工具,广泛应用于工业设计、建筑、汽车设计、船舶设计、3D打印、珠宝设计等领域。它以其能够创建自由曲面的高质量模型和精确的几何表示而著称。而Rhino Python是指Rhino...

    初学者做个花纹碗的Rhino犀牛建模教程.doc

    - 在Rhino中,你可以使用“曲线绕转”( Loft)命令,通过沿着一个路径将多个截面曲线绕转成一个连续的曲面。在这个例子中,可能需要先创建碗的横截面曲线,然后设置路径,最后执行Loft操作。 2. **建立路径,双轨...

    使用Rhino让java执行javascript的方法实例

    以下是一个简单的Java类,展示了如何使用Rhino执行JavaScript代码: ```java import org.mozilla.javascript.Context; import org.mozilla.javascript.Scriptable; import org.mozilla.javascript.ScriptableObject...

    使用Mock对象进行单元测试(Rhino Mocks)

    以下是一个简单的例子,假设我们有一个`ICalculator`接口,包含一个`Add`方法: ```csharp public interface ICalculator { int Add(int a, int b); } ``` 我们可以使用Rhino Mocks创建一个模拟的`ICalculator`...

    SampleRhino2.zip

    以下是一个简单的例子: ```java import org.mozilla.javascript.*; public class JavaToJsExample { public static void main(String[] args) { Context context = Context.enter(); try { Scriptable scope ...

    htmlunit依赖的所有jar

    这个例子展示了如何启动一个HtmlUnitDriver,导航到一个网页,并打印出页面标题。 请注意,具体的JAR文件版本可能会随着HTMLUnit的更新而变化,因此在实际使用时,最好参考HTMLUnit的官方文档或最新的Maven依赖来...

    语音机器人设计内容及应用

    早期的成功案例包括Flakey(Konolige等人,1993),这是一个可以在SRI走廊中通过声音控制的机器人。此后,社会交互型机器人领域逐渐发展起来(Fong等人,2003)。 在能够用自然语言交流的交互式机器人中,经常被...

    网管教程 从入门到精通软件篇.txt

    INT:中间代码,当一个源程序经过语法检查后编译产生一个可执行代码 IOF:Findit文档 IQY:Microsoft Internet查询文件 ISO:根据ISD 9660有关CD-ROM文件系统标准列出CD-ROM上的文件 ISP:X-Internet签字文件 ...

Global site tag (gtag.js) - Google Analytics