问题标签 [luaj]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
448 浏览

lua - LuaJ 如何避免覆盖全局表中的现有条目

我正在使用 LuaJ 将不同的 Lua 脚本加载到 Java 中的全局环境中,如下所示:

我的问题是,例如,如果 scriptName 恰好是require、print、error、math或调用后全局变量中已经存在的任何其他名称

,该脚本实际上将替换/覆盖实际功能,例如打印。

有什么简单的方法可以防止这种情况发生吗?

不幸的是,一个测试如:

对我不起作用,因为在某些情况下,当脚本更新时,它实际上应该覆盖现有脚本。

0 投票
1 回答
709 浏览

lua - LuaJ Lua 字节码混淆

我在解析使用 luaJ 生成的 lua 字节码时遇到问题。在指令计数常量计数之间出现了问题。好像少了一个字节。我正在使用 LuaJ 2.0.3。


这是一个十六进制转储,显示了我 十六进制转储

的意思:字节码是使用生成的



常量计数显示 250 个常量,但应该只有一个。如果在常量计数和指令列表之间多出 1 个字节,它将完美运行:

常量计数为 1,第一个常量的类型为 4(字符串),字符串的长度为 6,包括最后为空。


为什么这不起作用?为什么缺少一个字节?我该怎么做才能解决这个问题?

0 投票
1 回答
357 浏览

java - LuaJ(或任何其他 Java LUA 解释器) - 您可以从 Java 调用 LUA 脚本而不等待它返回吗?

我一直在为 Android 编写一个 RPG 游戏引擎,并且我认为我需要为我的战斗引擎添加一种脚本语言。就像我之前所做的那样,它太复杂了,无法通过 XML 配置来驱动游戏内容。LUA 似乎是游戏开发社区选择的脚本语言,所以我一直在做一些研究。由于引擎是用 Java 编写的,我正在考虑使用 LuaJ 作为我的 LUA 解释器,因为我发现一些旧线程表明它可能是最好的 Java LUA 解释器,但如果有人对更好的解释器有更当前的意见,我都是耳朵。

无论如何,我需要能够从 Java 调用 LUA 脚本,并继续游戏线程执行,而无需等待脚本返回。这对 LuaJ 或任何其他流行的基于 Java 的解释器是否可行?我知道我总是可以将脚本调用放在它自己的线程中,但是我可能会同时激活许多脚本,这是一种浪费,因为我不需要返回值。

0 投票
2 回答
186 浏览

java - 是否支持在 Luaj 中定义 Lua 模块的模块功能?

在我的 lua 脚本中,它通过以下语句需要另一个 lua 模块:

需要“另一个”

在我的另一个 lua 模块中,第一行代码是:

模块(..., )

但是,看起来 Luaj 在返回的全局对象中没有定义“模块”函数或根本不支持它。我用的是luaj 3.0 beter 2,是否支持luaj中的模块功能?如果是这样,如何使用它?

提前致谢!

0 投票
1 回答
811 浏览

java - 如何放弃 LuaJ 协程 LuaThread?

我正在试验一种游戏机制,其中玩家可以在游戏计算机上运行脚本。脚本执行将在游戏级别受到资源限制,每次滴答需要一定数量的指令。

以下概念验证演示了沙盒和任意用户代码节流的基本级别。它成功运行了约 250 条精心设计的“用户输入”指令,然后丢弃了协程。不幸的是,Java 进程永远不会终止。一点调查表明,LuaThread由 LuaJ 为协程创建的代码永远存在。

沙盒测试.java:

水库/test.lua:

资源/坏文件.lua:

文档表明,被认为不可恢复的协程将被垃圾收集并OrphanedThread抛出异常,发出LuaThread结束信号——但这永远不会发生。我的问题分为两部分:

  • 我是否在做一些根本错误的事情来导致这种行为?
  • 如果没有,我应该如何处理这种情况?从源头看来,如果我能获得对LuaThreadJava 的引用,我可能可以通过发出interrupt(). 这是一个好主意吗?

参考:Lua / Java / LuaJ - 处理或中断无限循环和线程

编辑:我在 LuaJ SourceForge 上发布了一个错误报告。它讨论了潜在的问题(线程没有像 Lua 规范中那样被垃圾收集)并提出了一些解决方法。

0 投票
1 回答
243 浏览

java - 如何在 Lua 中使用 Java 定义的实例方法?

由于http://luaj.org/luaj/README.html上的“Java 函数库”部分,我知道可以在 Lua 中使用 Java 定义的静态方法。

但是我正在努力找出如何使用相同的示例方法,我在这里有一个简短的示例:

(我知道我也可以在这里使用静态方法,但在现实生活中这是不可能的)

我正在使用以下 Lua 代码:

这不起作用,因为它期望返回用户数据,但我给它一个字符串。

我这样称呼 Lua 代码:

Lua 代码由codeTextArea.getText()

我的问题的底线是,如何使我的代码test作为实例方法运行?

0 投票
1 回答
583 浏览

java - 如何在 Luaj 中加载 Lua-Filesystem 和 Lua-Penlight

我有一个使用 Luaj 3.0 库的程序,我发现了一些我想包含的 lua 脚本,但它们都需要 lua 文件系统和 penlight,每当我尝试使用这些库时,它都会出错。

有谁知道我应该如何利用 Luaj 中的那些?

编辑:更多信息可能会有所帮助:我是 Archlinux 64 位系统,安装了 open-jdk8 Luaj、lua-filesystem 和 lua-penlight。我找到了一组名为Lua Java Utils的库,我想将其包含在我的项目中。但它总是得到这个错误:

第 24 行供参考:

它需要 penlight 库,而后者又需要 lua 文件系统,这就是我安装这两个文件系统的原因。我通过测试发现 Lua 文件系统没有通过尝试运行来加载lfs.currentdir()。我试过globals.load("local lfs = require \"lfs\"").call();了,但它也给出了一个错误。

我的 Lfs 图书馆位于/usr/lib/lua/5.2/lfs.so和 penlight 在/usr/share/lua/5.2/pl

0 投票
0 回答
368 浏览

libgdx - robovm 0.0.14 NullPointerException 问题

我已将我的 libgdx(1.3)、maven、robovm 项目从 0.0.13 迁移到 0.0.14 以支持 IOS 8 设备。我已经根据发行说明修改了我的 robovm.xml 文件,并且可以在 IOS 8 设备上运行,但在多个地方出现 NullPointerException。我遇到的问题如下:

  • 声音、音乐和振动不起作用。
  • 我得到 luaj NullPointerException 如下:(我试图在 robovm.xml 中链接 org.luaj.**.* 包,但没有任何改变)

org.luaj.vm2.LuaError: checkOnSessionEndAchievements:5 vm error: java.lang.NullPointerException at org.luaj.vm2.LuaClosure.execute(Unknown Source) at org.luaj.vm2.LuaClosure.call(Unknown Source) at net。 games.mobile.game.core.LuaScriptManager.runFunction(LuaScriptManager.java) 在 net.games.mobile.game.core.achievement.AchievementManager$3.run(AchievementManager.java) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor .java) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java) 在 java.lang.Thread.run(Thread.java)

  • 我在 otto 库的 Bus.java“注册”方法上得到 NullPointerException,但通过解决方法修复了它。

我认为 0.0.14 版本的反射行为发生了一些变化,因为据我所知,异常与反射有关。顺便说一句,IOS 7.1 设备上存在相同的 NullPointerException 问题,但“声音、音乐、振动”正在运行。

如何解决此 NullPointerException 问题?

感谢和问候

0 投票
0 回答
136 浏览

java - LuaJ 是否支持 __gc 元方法功能

在一些个人(琐碎)项目中尝试使用 LuaJ 时,我发现我似乎无法使用__gc表元表,如下例所示:

虽然我知道在 LuaJcollectgarbage()中是一个冗余函数调用,但由于 LuaJ 依赖于 Java 自己的垃圾收集,我将它包括在内,因为其他一些解释器似乎需要它(例如 Lua 自己的http://www.lua.org/ cgi-bin/演示

给定的示例似乎在上面提供的在线解释器中起作用。

我目前假设错误是 LuaJ 以某种方式或在程序执行结束时发生垃圾收集而不是在收集的对象上调用 __gc 元方法。

我已经尝试在应用程序结束之前给 java 足够的时间来 GC 表,方法是在调用之后提供一个漫长的等待期以及System.gc() 向运行时建议垃圾收集的调用,目前所有这些都无济于事。

0 投票
2 回答
1067 浏览

java - 从 Luaj 继承 Java 类

在 Luaj 中,是否有可能让 Lua 类扩展 Java 类?我尝试getmetatable()在绑定的类上使用,但显然它返回了nil.

这里,Wizard是一个绑定到 Lua 的 Java 类,SetupWizard也是我想要继承的 Lua 类Wizard

分配__index给 的值Wizard也不起作用。

SetupWizard定义: