一个最简单的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" }); } } ?