6.游戏特别离不开脚本(3)-JS脚本操作java(直接解析JS公式,并非完整JS文件或者函数)

engine.put("usList", us);

engine.put("obj", new JSModifiedJava()) ; 

取个变量名就put进去

import java.util.ArrayList;  
import java.util.List;  
  
import javax.script.ScriptEngine;  
import javax.script.ScriptEngineManager;  
import javax.script.ScriptException;  
  
  
public class JSModifiedJava {  
      
    public void sayHello(String name){  
        System.out.println("*************Hello***************"+name);  
    }   
      
    public static void main(String[] args) {  
  
        //创建 List对象,并添加3个原用户  
        List<String> us = new ArrayList<String>();  
        us.add("JLee 1");  
        us.add("JLee 2");  
  
        //获得JS引擎  
        ScriptEngineManager manager = new ScriptEngineManager();  
        ScriptEngine engine = manager.getEngineByExtension("js");
        String script = "";
        //把List对象加入JS引擎  
        engine.put("usList", us);
        
        {//用JS输出java对象的数据
            System.out.println("用JS输出java对象的数据");
            script = "var index; " + "var usname = usList.toArray(); "
                    + "for (index in usname) { "
                    + "println('原用户='+usname[index]); " + "}";

            //执行脚本
            try {
                engine.eval(script);// 通过引擎调用getScript()
            } catch (ScriptException e) {
                e.printStackTrace();
            }
        }
        
        {//JS可以对对象进行修改在,java代码可以得到修改后的
            System.out.println("JS可以对对象进行修改在,java代码可以得到修改后的");
            script = "usList.add("JLee 3"); "
                    + "usList.add("JLee 4"); ";
        
            //执行脚本
            try {
                engine.eval(script);// 通过引擎调用getScript()
            } catch (ScriptException e) {
                e.printStackTrace();
            }
            
            //java代码显示被JS修改后所有用户 
            for (String usname : us) {  
                System.out.println("所有用户 = " + usname);  
            }  
        }
        
        
        //将要操作的对象加入引擎  
        engine.put("obj", new JSModifiedJava()) ;  
          
        {//在JS中甚至可以调用对象的方法
            System.out.println("在JS中甚至可以调用对象的方法");
            script = "obj.sayHello('JLee')" ;
        
            //执行脚本
            try {
                engine.eval(script);// 通过引擎调用getScript()
            } catch (ScriptException e) {
                e.printStackTrace();
            }
            
        }
        
        
          
//        //根据JavaScript名获取一个脚本引擎实例  
//        ScriptEngine engine2 = manager.getEngineByName("JavaScript");  
//        try {  
//            engine2.eval("print('Hello JLee ...')");  
//        } catch (ScriptException e) {  
//            e.printStackTrace();  
//        }  
  
    }  
      
}  

执行结果

用JS输出java对象的数据
原用户=JLee 1
原用户=JLee 2
JS可以对对象进行修改在,java代码可以得到修改后的
所有用户 = JLee 1
所有用户 = JLee 2
所有用户 = JLee 3
所有用户 = JLee 4
在JS中甚至可以调用对象的方法
*************Hello***************JLee
原文地址:https://www.cnblogs.com/booke/p/3198124.html