问题标签 [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 投票
0 回答
49 浏览

eclipse - 如何修复从 luaJ 获得的“启动层初始化期间发生错误”

我试图让 luaJ 工作,但是当我将 luaj .jar 文件添加到模块路径时,我得到了这个错误:

启动层 java.lang.module.FindException 初始化期间发生错误:无法为 D:\Program Files\Eclipse\eclipse\plugins\luaj-3.0.1\lib\luaj-jse-3.0.1.jar 派生模块描述符原因:java.lang.module.InvalidModuleDescriptorException: luajc.class 在顶级目录中找到(模块中不允许未命名的包)

我已经尝试在任何地方搜索此问题。我的项目使用的是 java 15。

0 投票
0 回答
23 浏览

java - 如何将 LuaClosure 转换为 Java 方法?

我正在编写一个使用 LuaJ 库来加载和解释 Lua 代码的应用程序。我有以下代码,它是一个 OneArgFunction。

我需要将 LuaClosure 转换为 Java 方法并调用它。我怎么能这样做?

对不起,如果这个问题很难理解,因为我不擅长英语。

0 投票
0 回答
28 浏览

java - 需要类路径上的文件

我正在使用 LuaJ 从 Java 运行 Lua 脚本。在类路径中加载 Lua 文件可以正常工作,但是当从不同的 Lua 文件中导入其中一个文件时,它会说该文件不存在。我的 Lua 文件非常基础:

Mypackage.path设置为?.lua(LuaJ 中的默认值)。这就是我从 Java 加载文件的方式:

这会找到该文件,但在执行期间它会因以下错误而崩溃:

我难住了。我知道我之前已经让它工作了,但我不记得我是怎么做到的。

0 投票
1 回答
168 浏览

lua - 如何在 Lua/LuaJ 中使全局变量“不可变”?

描述

我正在做一个 LuaJ 程序,这是一个这样的 lib 脚本:

我希望该foo函数可以在其他脚本中直接调用(否require),但在不同的脚本中执行不可变。(即使脚本会覆盖它,它也会以其他脚本中的原始方式执行。)

例如,这是脚本 1:

这是脚本2:

做了什么

我看到了这两个问题。他们确实有效,但不是解决这个问题的方法。

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

防止 Lua 表中的函数覆盖

使全局环境只能访问(Lua)


我尝试在每次 exec 脚本或 set 时加载 lib local _ENV,但是因为可能有从 Java 到 Lua 的进一步回调,所以它不能正常工作。

Globals我现在通过每次在 Java 中加载脚本时创建一个并加载 lib 脚本来处理它,如下所示:

它运作良好,但成本很高。有没有更好的办法?

0 投票
1 回答
133 浏览

java - Eclipse 中的 JavaFX 和 luaj - java.lang.module.InvalidModuleDescriptorException: luajc.class found in top level directory

我必须将我的项目从 SWT 转换为 JavaFX。该项目充分利用 luaj 来强制和执行 lua 脚本,并且在 swt 中运行良好。

但与 javafx 有区别。Javafx 作为一个模块工作。

从那以后,我就遇到了luaj的麻烦。

尝试了两种不同的方法:

** 在类路径中使用 luaj **

Eclipse 不再看到它(类型 org.luaj.vm2.[...] 不可访问)。尝试使用订单但仍然无法正常工作。

使用 luaj 作为自动命名模块

我尝试作为用户库或直接作为外部 jar。

在这种情况下,eclipse 会看到 luaj 包。但是当我跑步时,我有消息

启动层初始化时出错

java.lang.module.FindException:无法为 E:\eclipse-workspace\Lib\luaj-3.0.1\lib\luaj-jse-3.0.1.jar 派生模块描述符 原因:java.lang.module.InvalidModuleDescriptorException :在顶级目录中找到 luajc.class(模块中不允许使用未命名的包)

我认为 lib 文件的名称很糟糕。我有一条警告说“自动模块 luaj.jse 的名称不稳定”,但是当我尝试重命名它时,当 eclipse 搜索旧文件名时出现错误。

这可以是原因吗?

我使用 jdk-16

这里是我的模块信息...

虚拟机参数

.classpath

感谢您的帮助!我从 2 天开始就在搜索,我很困惑!

编辑似乎 luaj 不能作为模块工作。我仍然坚持让它在类路径中工作......

0 投票
0 回答
76 浏览

java - Luaj newInstance("java.lang.Byte") 返回 java.lang.Integer

使用 LuaJ 时,我试图调用需要 Byte 参数的 java 方法。但是当我使用luajava.newInstance("java.lang.Byte","2")It 原来是 java.lang.Integer 并导致错误。

我无法修改 java 方法来进行强制转换。如何在 lua 中获取 Byte 实例?

编辑:该方法在我的世界源代码中,我找不到实现。所以我写了一个方法来测试。

爪哇:

路亚:

它是“类 java.lang.Integer”

0 投票
1 回答
49 浏览

java - luaj 无法导入我的应用程序的类:vm 错误:java.lang.ClassNotFoundException

尝试从我的应用程序中导入任何类时,luaj(3.0-beta2) 会抛出找不到该类的异常,在导入内置类时,不存在此类问题

代码运行函数

我的应用程序中的类层次结构https://i.stack.imgur.com/9jbwi.png

在我的应用程序中调用 classBinder() 函数https://i.stack.imgur.com/trIQj.png

类导入为“firebase”没关系,我需要通过createProxy从这个类中获取接口,但问题是一样的

升级版:

找到了我麻烦的原因。新版本的 luaj 使用了不同的类加载器,它看不到我的应用程序的内部类

来自该站点的引用:在较新的版本中,如果在 Java 系统库中找不到该类,LuaJ 似乎会检查本地应用程序目录。因为桌面项目是一个可运行的 *.jar 并且包含实际的类文件,所以桌面版本的游戏可以在任何版本的 LuaJ 中正确运行。相比之下,Android 将所有内容捆绑在 classes.dex 文件中,这在文件路径的意义上是不可“搜索”的。因此 ClassNotFoundException。

我也找到了一些解决方案,但它引发了不同的错误:

和新的 jlua 跑步者

新错误截图

0 投票
0 回答
21 浏览

java - Luaj 使用 java 运行 lua sprite,并且向后调用 Java 对象为 NULL

1

Player playerNow 将返回 null,就像此代码运行时的任何变量一样。

我使用调试,我很确定代码会执行到那里(GetBlock Function)

但是
在 Lua 脚本中向后调用原始 Java 似乎是不可能的,而是创建一个全新的 JVM?
否则为什么我称所有变量为空,即使它是静态的。
我错过了任何重要的代码吗?还是我的意图有问题?这是我在stackoverflow中的第一个问题,如果您需要任何信息,请告诉我。

Java运行lua脚本

Lua 脚本

回调函数在java中给出lua