3

I'm developing a game by luajava.When I call a java function in a lua coroutine,I get an error "Invalid method call. No such method." Here is the code

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))

Here is the result:

hello Bill

userdata: 040256B8

<b>function: 040252C0</b>

========run========

userdata: 040256B8

<b>function: 04026650</b>

false   Invalid method call. No such method.

I print the "people.sayHello" twice,Unexpectedly,I get different results.

How can I make it work? Thank you advance!

4

1 に答える 1

0

コロンはあなたを台無しにしています。2 つの引数を持つ sayHello 関数はありません。コロンを使用することで、'self' (人) と文字列を Java コードに送信します。2 つの引数を取る Java メソッドはありません。Lua でコロンの代わりにドットを使用するだけで機能します。

于 2013-09-06T15:40:40.660 に答える