zoukankan      html  css  js  c++  java
  • Java中使用LUA脚本语言

    Lua 是一个小巧的脚本语言。是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo所组成并于1993年开发。简单介绍可详见:http://baike.baidu.com/view/416116.htm

    ·要在Java上使用Lua脚本,必须有关于Lua脚本解释器以及Java程序可以访问这些脚本的相关API,即相关类库。我使用的是一个叫做LuaJava的开源项目,可以在: http://www.keplerproject.org/luajava/ 找到LuaJava的类库以及源代码,使用文档资等下载下来解压后包括两个文件(:luajava-1.1.jar 文件和 luajava-1.1.dll动态连接库文件luajava-1.1.jar就容易了,就是将其加入你的项目的ClassPath中,以便程序可以使用它提供的APIluaJava-1.1.dll就麻烦了,你必须将其加入你的Windows安装目录下,比如你用的是XP,安装在C盘,那就直接将其加入C:\WINDOWS目录下即可,当然你也可以将其加入你的JDK下的jre下好了,现在你的项目就可以使用Lua脚本来实现动态扩展功能了!不过不要急,你还得有工具来写Lua脚本吧?不可能用记事本来写吧?你可以使用UltraEdit,但你用UE打开lua文件后,会发现和记事本差不多,并没有高亮(可能新版本的支持Lua脚本了),如果你的UE不支持,那么先去UltraEdit的官网下载支持Lua的Wordfiles文件(http://www.ultraedit.com/files/wf/lua.txt),是个文本文件(lua.txt)。打开UltraEdit安装目录下的wordfile.txt,把lua.txt文件中的内容拷贝粘贴到wordfile.txt的末尾,存盘,OK,于是UltraEdit语法高亮项多出Lua一项,可以选择使用了。其他语言的语法高亮支持与此类似。但你如果是Java开发者,应该都用过Eclipse吧?可否在Eclipse下直接就写Lua脚本呢?答案是可以的!

    这当然是Eclipse的强大的插件管理功能啦,你可以去下载luaeclipse插件来使你的Eclipse拥有编写Lua脚本的能力(既可以高亮显示你的脚本,是不是很爽呢),你可以在这里下载:http://www.ideais.com.br/luaeclipse/

    下载后安装后,你的Eclipse就可以建立和编写Lua脚本了,注意设置一下首选项中关于LUA的属性(Eclipse安装插件就不用我说了吧????)

    好了,现在一切都准备好了,让我们来一个HelloWorld吧!

    首先在Eclipse先建立一个TestLua项目,然后编写如下程序:

    import org.keplerproject.luajava.*;

    public class Hello
    {
        public static void main(String[] args)
        {
          LuaState L = LuaStateFactory.newLuaState();
          L.openLibs();    
          System.out.println("这里是Java程序调用Lua脚本");    
        
          // 加载脚本hello.lua,并执行
          L.LdoFile("res/hello.lua"); 
        }
    }


    好了,程序写完了,当然是保存为Hello.java咯,注意,这是Java代码!这是Java代码调用了一个叫hello.lua的脚本,下边是这个脚本文件的内容(你可以直接把他们复制到你的hello.lua文件中):

    ================================================================

    --基本方法
    print("您现在使用的是LUA脚本语言")
    print("让我们一起来感受它的奇妙吧!\n")

    --特点1,赋值
    a={1,2}
    b=a
    print(a==b, a~=b)    --输出 true, false
    a={1,2}
    b={1,2}
    print(a==b, a~=b)    --输出 false, true

    --特点2,交换
    a,b=1,2
    a,b=b,a
    print(a)
    print(b)

    print("连接".."字符串"..2^3)
    print(type(2))

    --while循环
    i=0
    print("while循环例子")
    while i<5
    do 
    print(i);
    i=i+1 
    end

    --repeat循环
    i=0
    print("repeat循环例子")
    repeat
    print(i)
    i=i+1
    until i>=5

    --for循环
    print("for循环例子")
    for i=0,5,1
    do
    print(i)
    end

    T1={}
    T1[1] = 10
    print(T1[1])

    function fun(a,b,...)
    print(a)
    print(b)
    print(arg[1])
    print(arg[2])
    print(arg[3])
    return
    end

    a,b=2,3
    fun(a,b,200,400,500)

    ========================================================

    好了,上边的脚本如果你不懂什么意思也没关系,直接运行一下吧

    你可以执行编译执行那个Hello.java程序就可以了,就会看到如下的输出结果:

    ========================================================

    这里是Java程序调用Lua脚本
    您现在使用的是LUA脚本语言
    让我们一起来感受它的奇妙吧!

    true false
    false true
    2
    1
    连接字符串8
    number
    while循环例子
    0
    1
    2
    3
    4
    repeat循环例子
    0
    1
    2
    3
    4
    for循环例子
    0
    1
    2
    3
    4
    5
    10
    2
    3
    200
    400
    500

    ==========================================================

    怎样,是不是很爽呢?觉得没意思?好,在来一段脚本吧:


    frame = luajava.newInstance("java.awt.Frame", "Lua Java Console")
    console = luajava.newInstance("java.awt.TextArea")
    buttons_pn = luajava.newInstance("java.awt.Panel")
    execute_bt = luajava.newInstance("java.awt.Button", "Execute")
    clear_bt = luajava.newInstance("java.awt.Button", "Clear")
    exit_bt = luajava.newInstance("java.awt.Button", "Exit")

    frame:setSize(600,300)

    buttons_pn:add(execute_bt)
    buttons_pn:add(clear_bt)
    buttons_pn:add(exit_bt)

    BorderLayout = luajava.bindClass("java.awt.BorderLayout")

    frame:add(BorderLayout.NORTH, console)
    frame:add(BorderLayout.SOUTH, buttons_pn)
    frame:pack()
    frame:show()

    --
    -- Listeners
    --

    execute_cb = { 
    actionPerformed = function(ev)
        print("execute")
        pcall(loadstring(console:getText()))
    end
    }

    jproxy = luajava.createProxy("java.awt.event.ActionListener",execute_cb)

    execute_bt:addActionListener(jproxy)


    clear_cb = {actionPerformed= function (ev)
        print("clear");
        console:setText("");
    end
    }

    jproxy = luajava.createProxy("java.awt.event.ActionListener" ,clear_cb)
    clear_bt:addActionListener(jproxy)

    exit_cb = { actionPerformed=function (ev)
    print("exit")
        frame:setVisible(false)
        frame:dispose()
    end
    }


    jproxyb = luajava.createProxy("java.awt.event.ActionListener" ,exit_cb)

    exit_bt:addActionListener(jproxyb)

    close_cb = {    }
    function close_cb.windowClosing(ev)
        print("close")
        frame:setVisible(false)
        frame:dispose()
    end

    function close_cb.windowActivated(ev)
        print("act")
    end

    jproxy = luajava.createProxy("java.awt.event.WindowListener", close_cb)
    frame:addWindowListener(jproxy)


    转自:http://blog.163.com/pzxii_001/blog/static/392586792007322103020971/

  • 相关阅读:
    vs2019 临时下载目录 离线安装 脱机安装
    直膝跳缓解腰椎间盘突出 腰疼 臀部肌肉疼痛
    fullscreen
    ubuntu 18.04 网络图标不见的问题解决方案
    采样率与比特率
    关于git的换行符问题
    在ASP.NET Core中使用EPPlus导入出Excel文件
    .net core 转 excel datatable list<t> 互转 xlsx
    .net core C# DataTable 和List之间相互转换的方法
    C# 的三种序列化方法
  • 原文地址:https://www.cnblogs.com/blogyuan/p/3082354.html
Copyright © 2011-2022 走看看