本文目录一览:
- 在java中调用lua执很多次之后,内存使用率持续上升,无法释放
- java代码,执行lua脚本!
- lua和java有关系吗
- 请教如何用.lua调用.java包内的方法和变量
- c,c++,java,lua那种语言易学?
- lua如何调用java程序
在java中调用lua执很多次之后,内存使用率持续上升,无法释放
要看LuaState luaState = LuaStateFactory.newLuaState();
和 luaState.close();
的实现方式。
Lua 中有调用内存分配用户对象,但没注册 GC 的话,luastate
的 close 不会释放内存。
java代码,执行lua脚本!
要在 Java 上使用 Lua 脚本,必须有关于 Lua 脚本解释器以及 Java 程序可以访问这些脚本的相关 API,即相关类库。可以使用一个叫做 LuaJava 的开源项目。
lua和java有关系吗
Java 和 Lua 之间进行交互,可以使用一种基于 JNI 的 LuaJavaBridge 方法,目前已经集成在 Quick-Cocos 引擎中。 LuaJ 的功能整理:
- Lua 能够查找 Java 的方法;
- Lua 能够把函数作为参数传入到 Java;
- Lua 能够从 Java 获得查找调用方法的返回值;
- Java 能够调用 Lua 的函数;
请教如何用.lua调用.java包内的方法和变量
- Lua 加入到环境变量中。即 cmd 可以识别 lua 命令
(右键计算机 -> 高级系统设置 -> 高级面板 -> 环境变量,在系统变量或者用户变量中找到 path(没有就新建 path),path 中加入 Lua 的路径即可,如:
D:\Developments\Lua\5.1
(原来有 path 时,在原来的 path 值后加分号,再加路径,如:原来的值;D:\Developments\Lua\5.1
)) - 写一个 Lua 的脚本,放在任意路径下。比如在桌面下有文件
hello.lua
,文件内容为:print('Hello World!')
- 进入 cmd(Win+R 输入 cmd 回车),切到桌面:
cd C:\Documents\Desktop\
- 运行脚本即可:
输出结果为:lua hello.lua
Hello World!
c,c++,java,lua那种语言易学?
说实话,都不好学!C 语言在处理很多问题时很麻烦,而 C++ 中指针也是一个容易出问题的关键,好不好学在于你自己的理解和运用的能力。不过推荐你学 C++,毕竟它是后起之秀,而且现在 C++ 语言也在逐步淘汰中。其实你也可以考虑 Java,相对容易点。 Lua 的设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua 最著名的应用是在暴雪公司的网络游戏 WOW 中。Lua 由标准 C 编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译、运行。一个完整的 Lua 解释器不过 200K,在目前所有脚本引擎中,Lua 的速度是最快的。这一切都决定了 Lua 是作为嵌入式脚本的最佳选择。Lua 可以很容易地被扩展:由宿主语言(通常是 C 或 C++)提供其大部分功能。 总的一句话,程序语言都是相通的,一门学好了,其他的就容易多啦!如果你是学专业的,C++ 绝对不会错,而且其他都必须有所懂。如果是业余的,Lua 是在它们的基础上发展的,想往游戏之类的发展的话,先了解一下前二者再来学它!
lua如何调用java程序
Lua 是一个实用的脚本语言,相对于 Python 来说,比较小巧,但它功能并不逊色,特别是在游戏开发中非常实用(WoW 采用的就是 Lua 作为脚本的)。Lua 在 C/C++ 的实现我就不多说了,网上随便一搜,到处都是这方面的介绍。我想说的是如何在 Java 下使用 Lua 以提高编程效率、增强你的程序可扩展性。 首先,要在 Java 上使用 Lua 脚本,必须有关于 Lua 脚本解释器以及 Java 程序可以访问这些脚本的相关 API,即相关类库。我使用的是一个叫做 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 下。 好了,现在你的项目就可以使用 Lua 脚本来实现动态扩展功能了!不过不要急,你还得有工具来写 Lua 脚本吧?不可能用记事本来写吧??????? 你可以使用 UltraEdit,但你用 UE 打开 Lua 文件后,会发现和记事本差不多,并没有高亮(可能新版本的支持 Lua 脚本了),如果你的 UE 不支持,那么先去 UltraEdit 的官网下载支持 Lua 的 Wordfiles 文件(是个文本文件lua.txt
)。打开 UltraEdit 安装目录下的wordfile.txt
,把lua.txt
文件中的内容拷贝粘贴到wordfile.txt
的末尾,存盘,OK,于是 UltraEdit 语法高亮项多出 Lua 一项,可以选择使用了。其他语言的语法高亮支持与此类似。 但你如果是 Java 开发者,应该都用过 Eclipse 吧?可否在 Eclipse 下直接就写 Lua 脚本呢?答案是可以的! 这当然是 Eclipse 的强大的插件管理功能啦,你可以去下载 LuaEclipse 插件来使你的 Eclipse 拥有编写 Lua 脚本的能力。你可以在这里下载: 下载后安装后,你的 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 的奥妙,至于什么我就不说了,你们自己运行看看吧。。。哈哈,就写到这里了,我去上下 WC。。。