问题标签 [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.
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。
java - 如何将 LuaClosure 转换为 Java 方法?
我正在编写一个使用 LuaJ 库来加载和解释 Lua 代码的应用程序。我有以下代码,它是一个 OneArgFunction。
我需要将 LuaClosure 转换为 Java 方法并调用它。我怎么能这样做?
对不起,如果这个问题很难理解,因为我不擅长英语。
java - 需要类路径上的文件
我正在使用 LuaJ 从 Java 运行 Lua 脚本。在类路径中加载 Lua 文件可以正常工作,但是当从不同的 Lua 文件中导入其中一个文件时,它会说该文件不存在。我的 Lua 文件非常基础:
Mypackage.path
设置为?.lua
(LuaJ 中的默认值)。这就是我从 Java 加载文件的方式:
这会找到该文件,但在执行期间它会因以下错误而崩溃:
我难住了。我知道我之前已经让它工作了,但我不记得我是怎么做到的。
lua - 如何在 Lua/LuaJ 中使全局变量“不可变”?
描述
我正在做一个 LuaJ 程序,这是一个这样的 lib 脚本:
我希望该foo
函数可以在其他脚本中直接调用(否require
),但在不同的脚本中执行不可变。(即使脚本会覆盖它,它也会以其他脚本中的原始方式执行。)
例如,这是脚本 1:
这是脚本2:
做了什么
我看到了这两个问题。他们确实有效,但不是解决这个问题的方法。
我尝试在每次 exec 脚本或 set 时加载 lib local _ENV
,但是因为可能有从 Java 到 Lua 的进一步回调,所以它不能正常工作。
Globals
我现在通过每次在 Java 中加载脚本时创建一个并加载 lib 脚本来处理它,如下所示:
它运作良好,但成本很高。有没有更好的办法?
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 不能作为模块工作。我仍然坚持让它在类路径中工作......
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”
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 跑步者
新错误截图