如何在lua协程中调用Java函数



我正在用luajava开发一款游戏。当我在lua协程中调用java函数时,我会得到一个错误"无效的方法调用。没有这样的方法。"这是代码

package com.soyomaker;
import org.keplerproject.luajava.LuaException;
import org.keplerproject.luajava.LuaState;
import org.keplerproject.luajava.LuaStateFactory;
public class Main {
    public static void main(String[] args) {
        LuaState luaState = LuaStateFactory.newLuaState();
        luaState.openLibs();
        try {
            luaState.pushObjectValue(new People());
            luaState.setGlobal("people");
        } catch (LuaException e) {
            e.printStackTrace();
        }
        luaState.LdoFile("res/script.lua");
    }
}
//=============================================================================
package com.soyomaker;
public class People {
    public void sayHello(String name) {
        System.out.println("hello " + name);
    }
}
//=============================================================================
print(people)
print(people.sayHello)
people:sayHello("Bill")
function run()
  print("========run========")
  print(people)
  print(people.sayHello)
  people:sayHello("Jobs")
end
local co=coroutine.create(run)
print(coroutine.resume(co))

结果如下:

hello Bill
userdata: 040256B8
<b>function: 040252C0</b>
========run========
userdata: 040256B8
<b>function: 04026650</b>
false   Invalid method call. No such method.

我打印了两次"人民。说你好",没想到,我得到了不同的结果。

我怎样才能让它工作?提前感谢您!

冒号把你弄糊涂了。没有带两个参数的sayHello函数。通过使用冒号,您将字符串"self"(people)AND发送到java代码。您没有接受两个参数的java方法。只需在Lua中使用一个点而不是冒号即可使其工作。

最新更新