js文件中的merge函数将两个参数a,b相加,并返回c。
// expression.js
function merge(a, b) {
c = a * b
return c
}
在Java代码中读取js文件,并参数两个参数,然后回去返回值。
package com.sinaapp.manjushri
import java.io.FileReader
import javax.script.Invocable
import javax.script.ScriptEngine
import javax.script.ScriptEngineManager
/** * Java调用并执行js文件,传递参数,并活动返回值 * * @author manjushri */
public class ScriptEngineTest {
public static void main(String[] args) throws Exception {
ScriptEngineManager manager = new ScriptEngineManager()
ScriptEngine engine = manager.getEngineByName("javascript")
String jsFileName = "expression.js" // 读取js文件
FileReader reader = new FileReader(jsFileName) // 执行指定脚本
engine.eval(reader)
if(engine instanceof Invocable) {
Invocable invoke = (Invocable)engine // 调用merge方法,并传入两个参数
// c = merge(2, 3)
Double c = (Double)invoke.invokeFunction("merge", 2, 3)
System.out.println("c = " + c)
}
reader.close()
}
}
输出结果:
c = 5.0
可参考:package javaIjs
/**
* @param args
*/
import java.io.FileReader
import javax.script.Invocable
import javax.script.ScriptEngine
import javax.script.ScriptEngineManager
/**
* Java调用并执行js文件,传递参数,并活动返回值
*
* @author manjushri
*/
public class ScriptEngineTest {
public static void main(String[] args) throws Exception {
ScriptEngineManager manager = new ScriptEngineManager()
ScriptEngine engine = manager.getEngineByName("javascript")
String jsFileName = System.getProperty("user.dir")+"/src/javaIjs/expression.js"
// 读取js文件
FileReader reader = new FileReader(jsFileName)
// 执行指定脚本
System.out.println(engine.getContext().getReader())
engine.eval(reader)
if (engine instanceof Invocable) {
Invocable invoke = (Invocable) engine
// 调用merge方法,并传入两个参数
// c = merge(2, 3)
Double c = (Double) invoke.invokeFunction("merge1", 21, 3)
System.out.println("c = " + c)
}
reader.close()
}
}