Как вызвать функцию Java в сопрограмме lua?

Я разрабатываю игру от luajava. Когда я вызываю функцию java в сопрограмме lua, я получаю сообщение об ошибке "Недопустимый вызов метода. Нет такого метода". Вот код

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 ответ

Двоеточие запутывает тебя. Не существует функции sayHello с двумя аргументами. Используя двоеточие, вы отправляете "я" (люди) И строку в код Java. У вас нет метода Java, принимающего два аргумента. Просто используйте точку вместо двоеточия в Lua, чтобы она работала.

Другие вопросы по тегам