<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也蠻不錯的  回復  更多評論
      
    主站蜘蛛池模板: 香蕉高清免费永久在线视频| 蜜桃视频在线观看免费视频网站WWW| 亚洲精品自在线拍| a级毛片100部免费观看| 国产亚洲精午夜久久久久久| 亚洲精品成人网站在线播放| 中国极品美軳免费观看| 亚洲精品卡2卡3卡4卡5卡区| 91国内免费在线视频| 亚洲成av人片在线观看无码不卡| 狠狠色伊人亚洲综合网站色| 手机在线免费视频| 亚洲国产成人精品无码区花野真一 | 免费在线观看黄网站| 免费很黄无遮挡的视频毛片| 13一14周岁毛片免费| 亚洲乱码一二三四区麻豆| 又黄又大的激情视频在线观看免费视频社区在线| 国外成人免费高清激情视频 | 亚洲沟沟美女亚洲沟沟| 男人和女人高潮免费网站| 亚洲天堂免费在线| 亚洲精品无码一区二区| 亚洲国产一级在线观看| 成人爽a毛片免费| 亚洲女人影院想要爱| 日韩免费高清视频| 国产免费内射又粗又爽密桃视频 | 亚洲国产乱码最新视频| 免费国产a国产片高清| 99视频在线观看免费| 亚洲国产成人九九综合| 免费看国产精品麻豆| 在线免费观看h片| 亚洲一区二区三区精品视频| 波多野结衣视频在线免费观看| 亚洲日本VA午夜在线影院| 4338×亚洲全国最大色成网站| 国产成人亚洲午夜电影| 亚洲av成人无码久久精品| 黄a大片av永久免费|