要在Java上使用Lua腳本,必須有關(guān)于Lua腳本解釋器以及Java程序可以訪問(wèn)這些腳本的相關(guān)API,即相關(guān)類庫(kù)??梢允褂靡粋€(gè)叫做LuaJava的開(kāi)源項(xiàng)目,可以在 找到LuaJava的類庫(kù)以及源代碼,使用文檔資等
我們提供的服務(wù)有:成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、延安ssl等。為近1000家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的延安網(wǎng)站制作公司
Lua是一個(gè)實(shí)用的腳本語(yǔ)言,相對(duì)于Python來(lái)說(shuō),比較小巧,但它功能并不遜色,特別是在游戲開(kāi)發(fā)中非常實(shí)用(WoW采用的就是Lua作為腳本的)。Lua在C\C++的實(shí)現(xiàn)我就不多說(shuō)了,網(wǎng)上隨便一搜,到處都是這方面的介紹,我想說(shuō)的是如何在Java下使用Lua以提高編程效率、增強(qiáng)你的程序可擴(kuò)展性。
首先,要在Java上使用Lua腳本,必須有關(guān)于Lua腳本解釋器以及Java程序可以訪問(wèn)這些腳本的相關(guān)API,即相關(guān)類庫(kù)。我使用的是一個(gè)叫做LuaJava的開(kāi)源項(xiàng)目,可以在: 找到LuaJava的類庫(kù)以及源代碼,使用文檔資等
下載下來(lái)解壓后包括兩個(gè)文件(我下載的是1.1版本的): luajava-1.1.jar 文件和 luajava-1.1.dll動(dòng)態(tài)連接庫(kù)文件
luajava-1.1.jar就容易了,就是將其加入你的項(xiàng)目的ClassPath中,以便程序可以使用它提供的API
luaJava-1.1.dll就麻煩了,你必須將其加入你的Windows安裝目錄下,比如你用的是XP,安裝在C盤(pán),那就直接將其加入C:\WINDOWS目錄下即可,當(dāng)然你也可以將其加入你的JDK下的jre下
好了,現(xiàn)在你的項(xiàng)目就可以使用Lua腳本來(lái)實(shí)現(xiàn)動(dòng)態(tài)擴(kuò)展功能了!不過(guò)不要急,你還得有工具來(lái)寫(xiě)Lua腳本吧?不可能用記事本來(lái)寫(xiě)吧???????
你可以使用UltraEdit,但你用UE打開(kāi)lua文件后,會(huì)發(fā)現(xiàn)和記事本差不多,并沒(méi)有高亮(可能新版本的支持Lua腳本了),如果你的UE不支持,那么先去UltraEdit的官網(wǎng)下載支持Lua的Wordfiles文件(),是個(gè)文本文件(lua.txt)。打開(kāi)UltraEdit安裝目錄下的wordfile.txt,把lua.txt文件中的內(nèi)容拷貝粘貼到wordfile.txt的末尾,存盤(pán),OK,于是UltraEdit語(yǔ)法高亮項(xiàng)多出Lua一項(xiàng),可以選擇使用了。其他語(yǔ)言的語(yǔ)法高亮支持與此類似。
但你如果是Java開(kāi)發(fā)者,應(yīng)該都用過(guò)Eclipse吧?可否在Eclipse下直接就寫(xiě)Lua腳本呢?答案是可以的!
這當(dāng)然是Eclipse的強(qiáng)大的插件管理功能啦,你可以去下載luaeclipse插件來(lái)使你的Eclipse擁有編寫(xiě)Lua腳本的能力(既可以高亮顯示你的腳本,是不是很爽呢),你可以在這里下載:
下載后安裝后,你的Eclipse就可以建立和編寫(xiě)Lua腳本了,注意設(shè)置一下首選項(xiàng)中關(guān)于LUA的屬性(Eclipse安裝插件就不用我說(shuō)了吧????)
好了,現(xiàn)在一切都準(zhǔn)備好了,讓我們來(lái)一個(gè)HelloWorld吧!
首先在Eclipse先建立一個(gè)TestLua項(xiàng)目,然后編寫(xiě)如下程序:
import org.keplerproject.luajava.*;
public class Hello
{
public static void main(String[] args)
{
LuaState L = LuaStateFactory.newLuaState();
L.openLibs();
System.out.println("這里是Java程序調(diào)用Lua腳本");
// 加載腳本hello.lua,并執(zhí)行
L.LdoFile("res/hello.lua");
}
}
好了,程序?qū)懲炅?,?dāng)然是保存為Hello.java咯,注意,這是Java代碼!這是Java代碼調(diào)用了一個(gè)叫hello.lua的腳本,下邊是這個(gè)腳本文件的內(nèi)容(你可以直接把他們復(fù)制到你的hello.lua文件中):
================================================================
--基本方法
print("您現(xiàn)在使用的是LUA腳本語(yǔ)言")
print("讓我們一起來(lái)感受它的奇妙吧!\n")
--特點(diǎ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
--特點(diǎn)2,交換
a,b=1,2
a,b=b,a
print(a)
print(b)
print("連接".."字符串"..2^3)
print(type(2))
--while循環(huán)
i=0
print("while循環(huán)例子")
while i5
do
print(i);
i=i+1
end
--repeat循環(huán)
i=0
print("repeat循環(huán)例子")
repeat
print(i)
i=i+1
until i=5
--for循環(huán)
print("for循環(huán)例子")
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)
========================================================
好了,上邊的腳本如果你不懂什么意思也沒(méi)關(guān)系,直接運(yùn)行一下吧
你可以執(zhí)行編譯執(zhí)行那個(gè)Hello.java程序就可以了,就會(huì)看到如下的輸出結(jié)果:
========================================================
這里是Java程序調(diào)用Lua腳本
您現(xiàn)在使用的是LUA腳本語(yǔ)言
讓我們一起來(lái)感受它的奇妙吧!
true false
false true
2
1
連接字符串8
number
while循環(huán)例子
1
2
3
4
repeat循環(huán)例子
1
2
3
4
for循環(huán)例子
1
2
3
4
5
10
2
3
200
400
500
==========================================================
怎樣,是不是很爽呢?覺(jué)得沒(méi)意思?好,在來(lái)一段腳本吧:
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)
這段腳本運(yùn)行后你將會(huì)非常想進(jìn)一步了解LUA的奧妙,至于什么我就不說(shuō)了,你們自己運(yùn)行看看吧。。。哈哈,就寫(xiě)到這里了,我去上下WC。。。。
1.lua加入到環(huán)境變量中。即cmd可以識(shí)別lua命令
(右鍵計(jì)算機(jī)-》高級(jí)系統(tǒng)設(shè)置 在高級(jí)面板 -》環(huán)境變量 在系統(tǒng)變量或者用戶變量中找到path(沒(méi)有就新建path) path 中加入lua的路徑即可,如:D:\Developments\Lua\5.1(原來(lái)有path時(shí),在原來(lái)的path值后加分號(hào),再加路徑,如:原來(lái)的值;D:\Developments\Lua\5.1))
2.寫(xiě)一個(gè)lua的腳本,放在任意路徑下。比如在桌面下有文件 hello.lua文件內(nèi)容為
print('Hello World!')
3進(jìn)入cmd(win+R 輸入cmd回車) 切到桌面
cd C:\Documents\Desktop\
運(yùn)行腳本即可:lua hello.lua
輸出結(jié)果為:Hello World!
對(duì)于jvm這個(gè)平臺(tái),上面實(shí)現(xiàn)了很多腳本語(yǔ)言,比如python在java上的實(shí)現(xiàn)叫做jython,ruby的叫做jruby,lua也有在java上的實(shí)現(xiàn),你可以搜索一下,luajava就是一個(gè)。
其實(shí)在net平臺(tái)上也有很多腳本語(yǔ)言的實(shí)現(xiàn)的,比如iron(python)之類的。