在Java 7 以后,可以在Java代碼中調用javascript中的函數,請看下面的例子:
package com.lee; import java.io.FileNotFoundException; import java.io.FileReader; import java.util.Scanner; import javax.script.Bindings; import javax.script.Invocable; import javax.script.ScriptContext; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; /** * * @author liyanxue */ public class JavaInvokeJS { public static void main(String[] args) throws FileNotFoundException, ScriptException, NoSuchMethodException { ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript" ); Bindings bind = engine.createBindings(); bind.put( "factor", 0); engine.setBindings(bind, ScriptContext. ENGINE_SCOPE); // 輸入方式 /* Scanner input = new Scanner(System.in); while (input.hasNextInt()) { int first = input.nextInt(); int second = input.nextInt(); System.out.println("輸入的參數是:" + first + ", " + second); engine.eval(new FileReader("/Users/ liyanxue/model.js")); if (engine instanceof Invocable ) { Invocable in = (Invocable ) engine; // 執行 js函數 Double result = (Double) in.invokeFunction("formula", first, second); System.out.println("運算結果是:" + result.intValue()); } } */ int first = 23; int second = 7; System. out.println("輸入的參數是:" + first + ", " + second); engine.eval( new FileReader("/Users/liyanxue/model.js" )); if (engine instanceof Invocable) { Invocable in = (Invocable) engine; // 執行js函數 Double result = (Double) in.invokeFunction( "formula", first, second); System. out.println("運算結果是:" + result.intValue()); } } }
/Users/liyanxue/model.js里的代碼:
function formula(var1, var2) { return var1 + var2 + factor; }