LuaJava - 调用Lua API时出现无保护错误

时间:2014-11-03 16:44:42

标签: java eclipse lua luajava

我正在尝试在LuaJava中使用一个简单的函数(添加两个数字)。我对Lua的经验很少,我发现这很难,因为我无法找到LuaJava的深度文档。我现在可以从lua打印到java控制台,但除此之外什么都没有。

我尝试过实现一些方法,但每次都会得到同样的错误:

PANIC: unprotected error in call to Lua API (attempt to call a nil value)

这是我正在使用的代码:

import org.keplerproject.luajava.LuaState;
import org.keplerproject.luajava.LuaStateFactory;

public class Hello {
    public static void main(String[] args) {
        LuaState l = LuaStateFactory.newLuaState();
        l.openLibs();
        l.LdoFile("main.lua");
        l.call(0, 0);
        l.getGlobal("add");
        l.pushInteger(1);
        l.pushInteger(1);
        l.call(2, 1);
        int result = l.toInteger(1);
        l.pop(1);
        System.out.println("1 + 1 = " + result); 
    }
}

和Lua文件:

function add(a, b) 
    return a + b
end

我的IDE是Eclipse。提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我将假设问题发生在l.call(0, 0);行。

l.LdoFile("main.lua");很可能不会在必须调用的堆栈上返回一个函数。这就是lua C函数luaL_loadfile的作用。 luaL_dofile是围绕luaL_loadfile的宏,其中运行返回的块功能。

所以在l.LdoFile("main.lua");完成后我相信你在筹码上没有任何东西,你的add函数可供使用。