java中调用lua脚本语言1

本文介绍如何在Java中使用Lua脚本语言进行程序扩展,包括LuaJava库的配置及Lua脚本编辑器的选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:http://gundumw100.iteye.com/blog/1131308
Lua是一个实用的脚本语言,相对于Python来说,比较小巧,但它功能并不逊色,特别是在游戏开发中非常实用(WoW采用的就是Lua作为脚本的)。Lua在C\C++的实现我就不多说了,网上随便一搜,到处都是这方面的介绍,我想说的是如何在Java下使用Lua以提高编程效率、增强你的程序可扩展性。 

首先,要在Java上使用Lua脚本,必须有关于Lua脚本解释器以及Java程序可以访问这些脚本的相关API,即相关类库。我使用的是一个叫做LuaJava的开源项目,可以在:  http://www.keplerproject.org/luajava/ 找到LuaJava的类库以及源代码,使用文档资等 

下载下来解压后包括两个文件(我下载的是1.1版本的): 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下,比如我的是C:\Program Files\Java\jdk1.6.0_20\bin 

好了,现在你的项目就可以使用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项目,然后编写如下程序: 

Java代码   收藏代码
  1. import org.keplerproject.luajava.*;  
  2.   
  3. public class Hello  
  4. {  
  5.     public static void main(String[] args)  
  6.     {  
  7.       LuaState L = LuaStateFactory.newLuaState();  
  8.       L.openLibs();      
  9.       System.out.println("这里是Java程序调用Lua脚本");      
  10.       
  11.       // 加载脚本hello.lua,并执行  
  12.       L.LdoFile("res/hello.lua");   
  13.     }  
  14. }  



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

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

Lua代码   收藏代码
  1. --基本方法  
  2. print("您现在使用的是LUA脚本语言")  
  3. print("让我们一起来感受它的奇妙吧!\n")  
  4.   
  5. --特点1,赋值  
  6. a={1,2}  
  7. b=a  
  8. print(a==b, a~=b)    --输出 true, false  
  9. a={1,2}  
  10. b={1,2}  
  11. print(a==b, a~=b)    --输出 false, true  
  12.   
  13. --特点2,交换  
  14. a,b=1,2  
  15. a,b=b,a  
  16. print(a)  
  17. print(b)  
  18.   
  19. print("连接".."字符串"..2^3)  
  20. print(type(2))  
  21.   
  22. --while循环  
  23. i=0  
  24. print("while循环例子")  
  25. while i<5  
  26. do   
  27. print(i);  
  28. i=i+1   
  29. end  
  30.   
  31. --repeat循环  
  32. i=0  
  33. print("repeat循环例子")  
  34. repeat  
  35. print(i)  
  36. i=i+1  
  37. until i>=5  
  38.   
  39. --for循环  
  40. print("for循环例子")  
  41. for i=0,5,1  
  42. do  
  43. print(i)  
  44. end  
  45.   
  46. T1={}  
  47. T1[1] = 10  
  48. print(T1[1])  
  49.   
  50. function fun(a,b,...)  
  51. print(a)  
  52. print(b)  
  53. print(arg[1])  
  54. print(arg[2])  
  55. print(arg[3])  
  56. return  
  57. end  
  58.   
  59. a,b=2,3  
  60. fun(a,b,200,400,500)  


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

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

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

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

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

true false 
false true 


连接字符串8 
number 
while循环例子 





repeat循环例子 





for循环例子 






10 


200 
400 
500 

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


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

Lua代码   收藏代码
  1. frame = luajava.newInstance("java.awt.Frame""Lua Java Console")  
  2. console = luajava.newInstance("java.awt.TextArea")  
  3. buttons_pn = luajava.newInstance("java.awt.Panel")  
  4. execute_bt = luajava.newInstance("java.awt.Button""Execute")  
  5. clear_bt = luajava.newInstance("java.awt.Button""Clear")  
  6. exit_bt = luajava.newInstance("java.awt.Button""Exit")  
  7. frame:setSize(600,300)  
  8. buttons_pn:add(execute_bt)  
  9. buttons_pn:add(clear_bt)  
  10. buttons_pn:add(exit_bt)  
  11. BorderLayout = luajava.bindClass("java.awt.BorderLayout")  
  12. frame:add(BorderLayout.NORTH, console)  
  13. frame:add(BorderLayout.SOUTH, buttons_pn)  
  14. frame:pack()  
  15. frame:show()  
  16. --  
  17. -- Listeners  
  18. --  
  19. execute_cb = {   
  20. actionPerformed = function(ev)  
  21.     print("execute")  
  22.     pcall(loadstring(console:getText()))  
  23. end  
  24. }  
  25. jproxy = luajava.createProxy("java.awt.event.ActionListener",execute_cb)  
  26. execute_bt:addActionListener(jproxy)  
  27.   
  28. clear_cb = {actionPerformed= function (ev)  
  29.     print("clear");  
  30.     console:setText("");  
  31. end  
  32. }  
  33. jproxy = luajava.createProxy("java.awt.event.ActionListener" ,clear_cb)  
  34. clear_bt:addActionListener(jproxy)  
  35. exit_cb = { actionPerformed=function (ev)  
  36. print("exit")  
  37.     frame:setVisible(false)  
  38.     frame:dispose()  
  39. end  
  40. }  
  41.   
  42. jproxyb = luajava.createProxy("java.awt.event.ActionListener" ,exit_cb)  
  43. exit_bt:addActionListener(jproxyb)  
  44. close_cb = {    }  
  45. function close_cb.windowClosing(ev)  
  46.     print("close")  
  47.     frame:setVisible(false)  
  48.     frame:dispose()  
  49. end  
  50. function close_cb.windowActivated(ev)  
  51.     print("act")  
  52. end  
  53. jproxy = luajava.createProxy("java.awt.event.WindowListener", close_cb)  
  54. frame:addWindowListener(jproxy)  

这段脚本运行后你将会非常想进一步了解LUA的奥妙,至于什么我就不说了,你们自己运行看看吧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值