2010-10-22 21 views
12

Utilizzo Mozilla Rhino 1.7r2 (non la versione JDK) e desidero chiamare una funzione JS da Java.Rhino: Come chiamare la funzione JS da Java

funzione My JS è come questo:

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

Come posso fare questo?

Edit: (La funzione JS è in un file separato)

+0

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

+0

@org Questo esempio non mi è molto chiaro. Dove posso specificare il percorso del file JS? Immagino supponga che dovrei semplicemente digitare l'intero codice JS in cmdline e passarlo come argomento alla mia app java! ! ^^" – instantsetsuna

risposta

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: quando la funzione viene caricato nel campo di applicazione, oltre ad altre funzioni e variabili

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

funziona perfettamente grazie :) Ecco il codice completo http://pastie.org/1240495 – instantsetsuna

+1

Non dimenticate di aggiungere questo prima di blocco try context.setOptimizationLevel (-1);! – anshad

+0

@Maurice Perry se Voglio chiamare la funzione utilizzando array di numeri multidimensionali come [[1,3], [4,5], [6,9]], quindi come posso passare l'oggetto []? –

Problemi correlati