概述
-----------------------------
運行上面程序,控制臺會輸出Hello, Scripting上面這個簡單的Scripting程序演示了如何在Java里面運行腳本語言,除此之外,我們還可以利用Scripting API實現(xiàn)以下功能1、暴露Java對象為腳本語言的全局變量2、在Java中調(diào)用腳本語言的方法3、腳本語言可以實現(xiàn)Java的接口4、腳本語言可以像Java一樣使用JDK平臺下的類下面的類演示了以上4種功能
package Scripting;
import java.io.File;import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
/** * @author chinajash */
public class ScriptingAPITester {
public static void main(String[] args) throws Exception {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
testScriptVariables(engine);//演示如何暴露Java對象為腳本語言的全局變量
testInvokeScriptMethod(engine);//演示如何在Java中調(diào)用腳本語言的方法
testScriptInterface(engine);//演示腳本語言如何實現(xiàn)Java的接口
testUsingJDKClasses(engine);//演示腳本語言如何使用JDK平臺下的類
}
public static void testScriptVariables(ScriptEngine engine) throws ScriptException{
File file = new File("test.txt");
engine.put("f", file);
engine.eval("println('Total Space:'+f.getTotalSpace())");
}
public static void testInvokeScriptMethod(ScriptEngine engine) throws Exception{
String script = "function hello(name) { return 'Hello,' + name;}";
engine.eval(script);
Invocable inv = (Invocable) engine;
String res = (String)inv.invokeFunction("hello", "Scripting" );
System.out.println("res:"+res);
}
public static void testScriptInterface(ScriptEngine engine) throws ScriptException{
String script = "var obj = new Object();
obj.run = function() { println('run method called');
}";
engine.eval(script);
Object obj = engine.get("obj");
Invocable inv = (Invocable) engine;
Runnable r = inv.getInterface(obj,Runnable.class);
Thread th = new Thread(r);
th.start();
}
public static void testUsingJDKClasses(ScriptEngine engine) throws Exception{
//Packages是腳本語言里的一個全局變量,專用于訪問JDK的package
String js = "function doSwing(t){var f=new Packages.javax.swing.JFrame(t);
f.setSize(400,300);f.setVisible(true);}";
engine.eval(js);
Invocable inv = (Invocable) engine;
inv.invokeFunction("doSwing", "Scripting Swing" );
}
}
Scripting Tool
-----------------------------
新聞熱點
疑難解答