zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    概率期望训练之五
    概率期望训练之四
    JavaScript Source Map详解
    JSON.parse、JSON.stringify
    Linux cp命令直接覆盖不提示方法
    Service Worker
    HTML5 应用程序缓存
    二分图
    Tarjan
    FFT迭代加深 & NTT 多项式求逆
  • 原文地址:https://www.cnblogs.com/booke/p/3198124.html
Copyright © 2011-2022 走看看