本例子使用了JDK
以上的javax
script包
通过Invocable接口实现JAVA调用JS脚本里的方法
本例中调用分为内部执行脚本和外部执行脚本
外部执行脚本分为不带参数调用和带参数调用
主要采用invokeFunction方法调用
ObjectinvokeFunction(String name Object… args)
用于调用脚本中定义的顶层程序和函数
ObjectinvokeMethod(Object thiz String name Object… args)
对以前的脚本执行中已经编译的脚本对象(以 ScriptEngine 的状态保持)调用某一方法
package dejavase;
import javaxscriptInvocable;
import javaxscriptScriptEngineManager;
import javaxscriptScriptEngine;
import javaioFile;
import javaioReader;
import javaioFileReader;
public class AjavaInvokingFunction {
public static void main(String[] args) {
// 获得一个JavaScript脚本引擎也可以是ECMAScript脚本引擎
ScriptEngineManager manager = new ScriptEngineManager()
ScriptEngine engine = managergetEngineByName(JavaScript)
String titlescript = function sayTitle() {
+ println(源码实例使用javaxscript调用JS脚本里的方法)
+ println()
+ };
try {
// 调用内部脚本执行
engineeval(titlescript)
// 转换为Invocable
Invocable invocableEngine = (Invocable) engine;
// 不带参数调用sayTitle方法
invocableEngineinvokeFunction(sayTitle)
// 调用外部脚本执行
// 创建JS文件的File对象并读入流
File functionscript = new File(ajavajs)
Reader reader = new FileReader(functionscript)
// 开始执行ajavajs里的程序
engineeval(reader)
// 不带参数调用sayHello方法
invocableEngineinvokeFunction(sayHello)
// 带参数调用sayHello方法
invocableEngineinvokeFunction(sayHello mark)
} catch (Exception e) {
eprintStackTrace()
}
}
}
ajavajs文件
function sayHello(){
sayHello(null)
}
function sayHello(name){
if(name==null){
println(欢迎你!请注册Ajava会员)
}else{
println(name+独立JAVA社区欢迎你)
}
}
运行结果(控制台)
源码实例使用javaxscript调用JS脚本里的方法