java使用js引擎例子

import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.List;

import javax.script.Bindings;
import javax.script.Invocable;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineFactory;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

/**
 * java使用js引擎例子
 * 
 * @author yunshouhu
 *
 */
public class RunScriptDemo {

	public static void main(String[] args) throws Exception {
		testList();
		testfile();
		// test在脚本中调用Java对象和方法();
		testjs();
		test向js脚本引擎传递变量();
		test脚本预编译();
	}

	private static void test脚本预编译() throws Exception {
		ScriptEngineManager manager = new ScriptEngineManager();

		ScriptEngine engine = manager.getEngineByName("js");

		engine.eval("function add (a, b) {c = a + b; return c; }");
		Invocable jsInvoke = (Invocable) engine;

		Object result1 = jsInvoke.invokeFunction("add", new Object[] { 10, 5 });
		System.out.println("result1="+result1);

		Adder adder = jsInvoke.getInterface(Adder.class);
		int result2 = adder.add(10, 5);
		System.out.println("result2="+result2);
	}

	private static void test向js脚本引擎传递变量() {
		ScriptEngineManager manager = new ScriptEngineManager();
		ScriptEngine engine = manager.getEngineByName("js");
		engine.put("a", 1);
		engine.put("b", 5);

		Bindings bindings = engine.getBindings(ScriptContext.ENGINE_SCOPE);
		Object a = bindings.get("a");
		Object b = bindings.get("b");
		System.out.println("a = " + a);
		System.out.println("b = " + b);

		Object result;
		try {
			result = engine.eval("c = a + b;");
			System.out.println("a + b = " + result);
		} catch (ScriptException e) {
			e.printStackTrace();
		}

	}

	private static void testjs() {
		ScriptEngineManager manager = new ScriptEngineManager();
		ScriptEngine engine = manager.getEngineByName("javascript");
		String script = "print ('www.oschina.net')";
		try {
			engine.eval(script);
			// var pi_value=Math.PI;
			// var sqrt_value=Math.sqrt(15);
			// engine.eval("print Math.PI ");
		} catch (ScriptException e) {
			e.printStackTrace();
		}

	}

	private static void test在脚本中调用Java对象和方法() {

		ScriptEngineManager manager = new ScriptEngineManager();
		ScriptEngine jsEngine;
		jsEngine = manager.getEngineByExtension("js");
		try {
			jsEngine.eval("importPackage(javax.swing);"
					+ "var optionPane =JOptionPane.showMessageDialog(null, 'Hello!');");
		} catch (ScriptException e) {
			e.printStackTrace();
		}
	}

	private static void testfile() {
		ScriptEngineManager manager = new ScriptEngineManager();
		ScriptEngine engine = manager.getEngineByName("js");
		try {
			// 乱码
			// FileReader reader = new FileReader("src/my.js");

			InputStreamReader reader = new InputStreamReader(
					new FileInputStream("src/my.js"), "UTF-8");
			System.out.println(reader.getEncoding());
			engine.eval(reader);
			reader.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private static void testList() {
		ScriptEngineManager manager = new ScriptEngineManager();
		List<ScriptEngineFactory> factoryList = manager.getEngineFactories();
		System.out.println(factoryList.size());
		for (ScriptEngineFactory factory : factoryList) {
			System.out.println(factory.getEngineName() + "="
					+ factory.getLanguageName());
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值