转自: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项目,然后编写如下程序:
好了,程序写完了,当然是保存为Hello.java咯,注意,这是Java代码!这是Java代码调用了一个叫hello.lua的脚本,下边是这个脚本文件的内容(你可以直接把他们复制到你的hello.lua文件中):
================================================================
========================================================
好了,上边的脚本如果你不懂什么意思也没关系,直接运行一下吧
你可以执行编译执行那个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
==========================================================
怎样,是不是很爽呢?觉得没意思?好,在来一段脚本吧:
这段脚本运行后你将会非常想进一步了解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项目,然后编写如下程序:
- 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)
这段脚本运行后你将会非常想进一步了解LUA的奥妙,至于什么我就不说了,你们自己运行看看吧。