Tag: luaj

Lua / Java / LuaJ – 处理或中断无限循环和线程

我正在使用LuaJ在Java中运行用户创建的Lua脚本。 但是,运行永不返回的Lua脚本会导致Java线程冻结。 这也使线程不可中断。 我运行Lua脚本: JsePlatform.standardGlobals().loadFile(“badscript.lua”).call(); badscript.lua包含while true do end 。 我希望能够自动终止陷入不屈的循环的脚本,并允许用户在运行时手动终止他们的Lua脚本。 我已经阅读了有关debug.sethook和pcall的内容 ,但我不确定我是如何正确地将它们用于我的目的。 我也听说沙盒是一个更好的选择,虽然这有点超出我的范围。 这个问题也可能仅扩展到Java线程。 我没有找到关于在一段while (true);中断Java线程的任何确切信息while (true); 。 在线Lua演示是非常有前途的,但似乎“坏”脚本的检测和终止是在CGI脚本而不是Lua中完成的。 我是否可以使用Java调用CGI脚本,后者又调用Lua脚本? 不过,我不确定是否允许用户手动终止他们的脚本。 我丢失了Lua演示源代码的链接,但我手头有它。 这是神奇的路线: tee -a $LOG | (ulimit -t 1 ; $LUA demo.lua 2>&1 | head -c 8k) 有人能指出我正确的方向吗? 一些来源: 嵌入式Lua – 超时流氓脚本(例如无限循环) – 任何人的例子? 防止Lua无限循环 嵌入式Lua – 超时流氓脚本(例如无限循环) – 任何人的例子? 当一些循环执行长任务时如何中断线程? 在Java中指定的时间限制后杀死线程

如何将对象传递给公开的luaj函数?

我正在尝试使用Luaj + java构建一个控制器。 我有以下java类 public class Duck { public void talk() { System.out.println(“Duck quacks!”); } public void walk() { System.out.println(“Duck walks!”); } } public class Person { public void talk() { System.out.println(“Person talks!”); } public void walk() { System.out.println(“Person walks!”); } } 以及控制器的以下lua脚本: onTalk(obj) obj:talk(); end onWalk(obj) obj:walk(); end 理想情况下,我想定义一个控制器(用lua编写),我将保留所有程序的逻辑,并且我希望将该控制器的API公开给我的java代码。 我试图使用以下方法: ScriptEngineManager sem = new […]