`

java中调用lua脚本语言1

    博客分类:
  • LUA
Lua 
阅读更多
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项目,然后编写如下程序:

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的奥妙,至于什么我就不说了,你们自己运行看看吧。
分享到:
评论
2 楼 Memories_NC 2017-06-21  
本地lua脚本终于执行成功了,虽然不是通过redis
1 楼 完美天龙 2015-04-10  
有意思。顶一个。

相关推荐

    Java调用Lua脚本(LuaJava使用、安装及Linux安装编译)

    Java调用Lua脚本是一种常见的跨语言交互技术,特别是在游戏开发和自动化脚本编写中。本文将详细介绍如何在Java环境中使用LuaJava库进行交互,并在Linux系统上进行安装和编译。 首先,让我们理解LuaJava。LuaJava是...

    Jill——Java编写的Lua脚本引擎

    **Jill:Java中的Lua脚本引擎** Jill是一个用Java语言实现的Lua脚本引擎,它为Java应用程序提供了一种高效且灵活的方式来运行Lua代码。Lua是一种轻量级的、解释型的脚本语言,因其简洁的语法和强大的功能在游戏开发...

    Java下执行Lua脚本工具LuaJava.zip

    LuaJava 是一款专门用于在java下执行lua脚本,该工具的主要目的是允许编写Lua脚本去操作Java组件,不需要任何声明以及任何的预处理。LuaJava 也允许Java去实现一个接口来调用Lua,这样任何的Lua相关接口功能都可以被...

    Javaweb中调用lua的插件

    4. 交互:在Lua脚本中调用Java方法,或者在Java中调用返回的Lua函数,实现双向通信。 需要注意的是,由于Lua和Java的数据类型不同,两者之间的数据转换需要特别处理。例如,Lua的表可能对应Java的Map,而Lua的字符...

    SpringBoot+Redis执行lua脚本的方法步骤

    * `key [key ...]`,被操作的 key,可以多个,在 Lua 脚本中通过 `KEYS[1], KEYS[2]` 获取。 * `arg [arg ...]`,参数,可以多个,在 Lua 脚本中通过 `ARGV[1], ARGV[2]` 获取。 4. 使用 RedisTemplate 执行 Lua ...

    luajava-1.1.0

    luajava-1.1.0是一个专门用于连接Lua脚本语言和Java平台的库,它为开发者提供了在Java应用程序中运行Lua代码的能力,同时也允许Lua程序调用Java类和方法,实现了两者的无缝集成。这一强大的工具广泛应用于游戏开发、...

    nodemcu lua脚本语言开发工具

    《nodemcu Lua脚本语言开发工具详解》 在物联网(IoT)领域,nodemcu因其小巧的体积、丰富的功能以及易于编程的特性,成为众多开发者的选择。它基于ESP8266芯片,内嵌Lua解释器,使得开发者可以使用Lua这种轻量级的...

    SpringBoot通过redisTemplate调用lua脚本并打印调试信息到redis log(方法步骤详解)

    SpringBoot通过redisTemplate调用lua脚本并打印调试信息到redis log是指在SpringBoot应用程序中,通过redisTemplate调用lua脚本,并将调试信息打印到redis log中。本文将详细介绍如何通过redisTemplate调用lua脚本,...

    android 与 lua 相互调用

    - **从Java调用Lua**:创建Lua状态(LuaState),然后使用`lua_getglobal`获取Lua函数,接着通过`lua_pcall`调用该函数。传入参数可以通过`lua_pushXXX`系列函数压栈,返回值则通过`lua_toXXX`系列函数读取。 - *...

    android调用lua方法

    在Android平台上,有时候我们需要在Java代码中调用Lua脚本来执行特定任务,这可能是为了实现游戏逻辑、简化复杂计算或动态加载功能等。本篇将详细介绍如何在Android应用中实现对Lua函数的调用。 首先,我们需要一个...

    luajava实例及jar包,dll动态链接库

    luajava-1.1.jar是LuaJava的Java库文件,包含了LuaJava的全部Java类和接口,使得Java开发者能够调用Lua环境并执行Lua脚本。在Java程序中,你可以通过`java.lang.ClassLoader`加载此jar包,然后使用`LuajavaLib`类来...

    luajava-x32-x64.zip

    "说明.txt"文件很可能是对如何集成和使用这些库的详细指南,包括如何加载luajava库,如何在Lua中调用Java类,以及如何在Java中执行Lua脚本等步骤。通常,它会提供示例代码帮助开发者快速上手。 总结来说,luajava-...

    LuaJava5.1

    LuaJava5.1 是一个专门为Java开发者设计的库,它允许在Java应用程序中无缝集成和调用Lua脚本。这个库的核心是LuaJava.dll,这是一个动态链接库,负责在Java和Lua之间建立桥梁,使得Java可以执行Lua代码并获取其结果...

    luajava-1.1-x64-lua51

    "luajava-1.1-x64-lua51"是一个针对64位系统的版本,它提供了将Lua脚本集成到Java应用中的解决方案。本文将深入探讨这个工具包的原理、用途以及如何使用。 首先,我们要理解Lua和Java的基础。Lua是一种轻量级的脚本...

    Lua-1.0.113 luajava

    1. 类加载:LuaJava允许从Lua脚本中加载和实例化Java类。 2. 方法调用:Lua脚本可以直接调用Java对象的方法,反之亦然。 3. 数据类型转换:Lua和Java之间的数据类型可以相互转换,如Lua表可以映射为Java集合,Lua...

    lua插件包,帮助你搭建lua-java项目

    在Java项目中,你可以通过编写Java代码来创建Lua环境,加载Lua脚本,然后在Java中调用Lua函数,反之亦然。这样可以将复杂逻辑交给Lua处理,而保持Java的稳定性和安全性。 总之,lua插件包提供了一种简单的方法将...

    java+redis+lua实现重复提交操作拦截.zip

    - 在Java中,Spring框架提供了AOP支持,可以创建自定义注解,并在特定的切点(如方法调用)上应用这些注解,实现拦截器功能。 - 项目中可能定义了一个名为`@RepeatableOperationCheck`的注解,用于标记那些需要防...

    luajava.zip

    LuaJava是一个强大的工具,它将Lua脚本语言与Java环境紧密地结合起来,使得开发者可以在Java应用程序中无缝地使用Lua脚本进行逻辑处理和扩展功能。在本文中,我们将深入探讨LuaJava的核心特性、安装与配置、使用方法...

    luajava1.1 64位版本和32位版本

    在使用luajava时,可以通过Java程序调用Lua脚本,或者在Lua中直接访问Java对象。例如,你可以在Java代码中使用`Luajava.bindClass("java.lang.String")`来绑定Java的String类,然后在Lua脚本中直接创建和操作String...

    lua脚本编程语言,需要的应该也是很迫切的

    从给定的文件标题、描述、标签以及部分内容中,我们可以提炼出关于Lua脚本编程语言的重要知识点,这些知识点覆盖了Lua的基本概念、特点、应用场景以及其与其他编程语言的关系。 ### Lua脚本编程语言简介 #### 核心...

Global site tag (gtag.js) - Google Analytics