<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    千里冰封
    JAVA 濃香四溢
    posts - 151,comments - 2801,trackbacks - 0
    JDK6.0里面加了一個很實用的包,javax.script,它是JAVA新增的操作腳本的包,利用它我們可以對腳本語言進行操作,比如修改,或者調用,并且可以和JAVA語言交互,如果我們利用好的話,我們利用它來實現一些經常要改的部份,這樣我們就可以把一些算法寫到js文件里面,然后再在運行的時候讀取出來并執行,這樣就省去了更改一些東西需要重新編譯的過程了.

    下面我們就來看一個例子吧,看看如何在JAVA代碼里面操作腳本并調用里面的方法.

    /*
     * Test.java
     * 
     * Created on 2007-9-19, 15:28:49
     * 
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     
    */

    package lbf.script;

    import java.io.FileReader;
    import java.util.ArrayList;
    import java.util.List;
    import javax.script.Bindings;
    import javax.script.Invocable;
    import javax.script.ScriptContext;
    import javax.script.ScriptEngine;
    import javax.script.ScriptEngineManager;
    import javax.swing.JFrame;

    /**
     *
     * 
    @author hadeslee
     
    */
    public class Test {
        
        
    public static void main(String[] args)throws Exception {
            
    //根據js的后綴名生成一個解析JS的腳本解析引擎
            ScriptEngine engin=new ScriptEngineManager().getEngineByExtension("js");
            
    //查詢一下這個引擎是否實現了下面很實用的接口
            System.out.println(engin instanceof Invocable);
            
    //聲明兩個對象,傳入到JS里面去
            JFrame jf=new JFrame("test");
            List
    <String> list=new ArrayList<String>();
            
    //得到挷定的鍵值對象,把當前的兩個JAVA對象放進去
            Bindings bind=engin.createBindings();
            bind.put(
    "jf",jf);
            bind.put(
    "list",list);
            
    //把挷下的鍵值對象放進去,作用域是當前引擎的范圍 
            engin.setBindings(bind, ScriptContext.ENGINE_SCOPE);
            
    //用引擎執行一段寫在JS文件里面的代碼
            Object obj=engin.eval(new FileReader("test.js"));
            
    //這個時候返回值當然 是null了
            System.out.println(obj);
            
    //把當前的引擎強制轉為Invocable,這樣就可以調用定義在JS文件里面的一個一個函數了
            Invocable in=(Invocable)engin;
            
    //得到了從JS里面返回來的對象
            List<String> l=(List<String>)in.invokeFunction("getNames");
            System.out.println(l);
            
    //調用一下定義在JS里面的另一個函數
            in.invokeFunction("testJS");
            
    //最后調用一個函數,該函數可以使我們前面定義的窗體顯示出來
            in.invokeFunction("doSth");
        }
    }

    下面是定義在test.js里面的內容

    function doSth(){
            jf.setSize(
    500,300);
            jf.setVisible(
    true);
            jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);
        }
        
        
        
    function getNames(){
                list.add(
    "doSth");
                list.add(
    "getNames");
                
    return list;
            }
            
            
    function testJS(){
                    print('Hello world
    !');
                }

    我們可以看到,在JAVA運行了以后,窗體會顯示出來,并且我們可以接收到從JS解析引擎里面傳回的數據,當然我們也可以調用一個很普通的JS函數,想象一下,如果我們把我們程序運行時的一些對象都設到Bindings里面去,那么我們JS豈不是有很大的自由度了嗎?因為JS里面也可以操作我們的JAVA對象了,并且我們可以像JAVA編程一樣的對JS編程了,還不用再編譯,馬上就可以運行.靈活性豈不是變得更高了嗎?

    過幾天寫一個利用JAVA解析JS提高編程靈活性的例子,以體現一下這個包的用處,不過,JS的缺點就是執行速度慢,比起JAVA代碼那是慢多了,但是一些初始化的事情,或者一些設置的事情,我們就不用寫死在程序里面了,就可以從我們定義的JS文件里面讀取了,畢竟那些只執行一次的方法犧牲一點效率換來很高的靈活度是很值得的.



    盡管千里冰封
    依然擁有晴空

    你我共同品味JAVA的濃香.
    posted on 2007-09-19 16:19 千里冰封 閱讀(1739) 評論(4)  編輯  收藏 所屬分類: JAVASE

    FeedBack:
    # re: JAVA6.0操作腳本語言
    2007-09-19 16:40 | 千里冰封
    呵呵,好啊,歡迎來到廈門這個美麗 的城市 :)  回復  更多評論
      
    # re: JAVA6.0操作腳本語言
    2007-09-19 16:46 | 千里冰封
    :(
    留言不見了?  回復  更多評論
      
    # re: JAVA6.0操作腳本語言[未登錄]
    2007-09-20 10:05 | 路易
    換了個界面啊!比原來的好看多了  回復  更多評論
      
    # re: JAVA6.0操作腳本語言
    2007-10-11 15:39 | wj
    1.5里面用ShellExecutor也蠻不錯的  回復  更多評論
      
    主站蜘蛛池模板: 国产免费人人看大香伊| 亚洲一区免费观看| 午夜私人影院免费体验区| 91精品免费不卡在线观看| 亚洲区小说区激情区图片区| 亚洲色图在线观看| 免费A级毛片无码A∨中文字幕下载| 天天看片天天爽_免费播放| 亚洲日韩av无码中文| 在线看片无码永久免费aⅴ| 久久精品国产亚洲av影院| 亚洲人成色777777精品| 日本免费人成黄页在线观看视频| 国产精品亚洲AV三区| 先锋影音资源片午夜在线观看视频免费播放| 亚洲精品乱码久久久久久蜜桃不卡 | 亚洲视频在线免费| a毛片久久免费观看| 免费福利电影在线观看| 日韩亚洲国产综合久久久| 亚洲校园春色小说| a级午夜毛片免费一区二区| 亚洲日本一区二区三区| 毛片免费在线观看网站| 亚洲色欲色欲综合网站| 国产乱码免费卡1卡二卡3卡| 亚洲av乱码中文一区二区三区| 久久亚洲国产成人精品无码区| 免费一区二区三区| 在线综合亚洲欧洲综合网站| 亚洲第一区在线观看| 一级成人a毛片免费播放| 亚洲精品456人成在线| 亚洲伊人久久综合中文成人网| 久久久99精品免费观看| 亚洲精品乱码久久久久久V| 亚洲中文字幕在线乱码| 日韩一区二区a片免费观看| 亚洲成无码人在线观看| 国产成人免费a在线视频色戒| 亚洲欧美日韩综合久久久|