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

时间:2012-03-18 15:41:30

标签: luajava

我正在开发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.

我打印了两次“people.sayHello”,出乎意料的是,我得到了不同的结果。

我怎样才能让它发挥作用?谢谢你提前!

1 个答案:

答案 0 :(得分:0)

冒号让你搞砸了。没有带有两个参数的sayHello函数。通过使用冒号,您将'self'(人员)和字符串发送到java代码。你没有带有两个参数的java方法。只需在Lua中使用点而不是冒号即可使其工作。