Java中使用LUA指令碼語言

來源:互聯網
上載者:User

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中,以便程式可以使用它提供的API,luaJava-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/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.