2010-10-22 12 views
12

Estoy usando Mozilla Rhino 1.7r2 (no la versión JDK), y quiero llamar a una función JS desde Java.Rhino: Cómo llamar a la función JS desde Java

función Mi JS es así:

function abc(x,y) 
{ 
    return x+y 
} 

¿Cómo se hace esto?

Editar: (La función de JS está en un archivo separado)

+0

http: // www.mozilla.org/rhino/tutorial.html#callingJSfuns –

+0

@org Ese ejemplo no es muy claro para mí. ¿Dónde especifico la ruta del archivo JS? ¡Supongo que asume que simplemente escribiría todo el código JS en cmdline y lo pasaría como un arg a mi aplicación java! ^^ " – instantsetsuna

Respuesta

33
String script = "function abc(x,y) {return x+y;}"; 
Context context = Context.enter(); 
try { 
    ScriptableObject scope = context.initStandardObjects(); 
    Scriptable that = context.newObject(scope); 
    Function fct = context.compileFunction(scope, script, "script", 1, null); 
    Object result = fct.call(
      context, scope, that, new Object[] {2, 3}); 
    System.out.println(Context.jsToJava(result, int.class)); 
} finally { 
    Context.exit(); 
} 

UPDATE: cuando la función se carga en el ámbito de aplicación, junto con otras funciones y variables

String script = "function abc(x,y) {return x+y;}" 
     + "function def(u,v) {return u-v;}"; 
Context context = Context.enter(); 
try { 
    ScriptableObject scope = context.initStandardObjects(); 
    context.evaluateString(scope, script, "script", 1, null); 
    Function fct = (Function)scope.get("abc", scope); 
    Object result = fct.call(
      context, scope, scope, new Object[] {2, 3}); 
    System.out.println(Context.jsToJava(result, int.class)); 
} finally { 
    Context.exit(); 
} 
+0

¡Funciona perfectamente! ¡Gracias! :) Este es el código completo http://pastie.org/1240495 – instantsetsuna

+1

No olvides agregar esto antes del bloque try context.setOptimizationLevel (-1); – anshad

+0

@Maurice Perry if Quiero llamar a la función utilizando un conjunto de enteros multidimensional como [[1,3], [4,5], [6,9]], ¿cómo puedo pasar Objeto []? –

Cuestiones relacionadas