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/

Lua脚本语言可以通过Java调用,也可以在Lua调用Java方法。在Java使用Lua脚本语言,可以通过LuaJ库来实现LuaJ是Lua的一个Java版本的实现,它允许在Java程序调用Lua程序,并在Lua程序调用Java程序,提供了方便的脚本功能。你可以使用以下步骤在Java使用Lua脚本语言: 1. 导入LuaJ库:在你的Java项目,你需要引入LuaJ库的依赖。可以通过在pom.xml文件添加以下依赖关系来完成: ``` <dependency> <groupId>org.luaj</groupId> <artifactId>luaj-jse</artifactId> <version>3.0.1</version> </dependency> ``` 2. 初始化Lua运行时环境:使用Globals类创建一个Lua运行时环境。Globals是LuaJ库的一个类,它提供了加载和运行Lua脚本功能。 3. 加载Lua脚本使用Globals的loadfile方法加载Lua脚本文件。loadfile方法将返回一个LuaValue对象,该对象代表了Lua脚本的函数。 4. 运行Lua脚本:通过调用LuaValue对象的call方法来运行Lua脚本。你可以传递参数给Lua脚本,并且可以从Lua脚本获取返回值。 以下是一个示例代码,演示了如何在Java调用Lua脚本: ```java import org.luaj.vm2.*; import org.luaj.vm2.lib.jse.*; public class LuaScriptRunner { public static void main(String[] args) { String script = "hello.lua"; // 指定Lua脚本文件 // 初始化Lua运行时环境 Globals globals = JsePlatform.standardGlobals(); // 加载Lua脚本 LuaValue chunk = globals.loadfile(script); // 运行Lua脚本 chunk.call(LuaValue.valueOf(script)); } } ``` 请注意,以上代码的`hello.lua`是一个示例的Lua脚本文件名,你需要根据实际情况替换为你要调用的Lua脚本文件名。 你还有其他问题吗?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT_熊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值