本例子使用了JDK 1.6以上的javax.script包,通过Invocable接口实现JAVA调用JS脚本里的方法,本例中调用分为内部执行脚本和外部执行脚本,外部执行脚本分为不带参数调用和带参数调用。主要采用invokeFunction方法调用:
ObjectinvokeFunction(String name, Object… args)
用于调用脚本中定义的顶层程序和函数。
ObjectinvokeMethod(Object thiz, String name, Object… args)
对以前的脚本执行中已经编译的脚本对象(以 ScriptEngine 的状态保持)调用某一方法。
package ajava.code.javase;
import javax.script.Invocable;
import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
import java.io.File;
import java.io.Reader;
import java.io.FileReader;
public class AjavaInvokingFunction {
public static void main(String[] args) {
// 获得一个JavaScript脚本引擎,也可以是ECMAScript脚本引擎
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
String titlescript = "function sayTitle() {"
+ " println('AJava.org源码实例-使用javax.script调用JS脚本里的方法');"
+ " println('--------------------------------------------------');"
+ "}";
try {
// 调用内部脚本执行-----------------------------------------
engine.eval(titlescript);
// 转换为Invocable
Invocable invocableEngine = (Invocable) engine;
// 不带参数调用sayTitle方法
invocableEngine.invokeFunction("sayTitle");
// 调用外部脚本执行------------------------------------------
// 创建JS文件的File对象,并读入流
File functionscript = new File("ajava.js");
Reader reader = new FileReader(functionscript);
// 开始执行ajava.js里的程序
engine.eval(reader);
// 不带参数调用sayHello方法
invocableEngine.invokeFunction("sayHello");
// 带参数调用sayHello方法
invocableEngine.invokeFunction("sayHello", "mark");
} catch (Exception e) {
e.printStackTrace();
}
}
}
ajava.js文件:
function sayHello(){
sayHello(null);
}
function sayHello(name){
if(name==null){
println("欢迎你!请注册Ajava会员");
}else{
println(name+",AJava.org独立JAVA社区欢迎你");
}
}
运行结果(控制台):
AJava.org源码实例-使用javax.script调用JS脚本里的方法
QQ 744437114
疯狂软件官网:www.fkjava.org
疯狂java视频 android视频:http://www.fkjava.org/video.html |
|