【问题标题】:How to call Java Function in a lua coroutine?如何在 lua 协程中调用 Java 函数?
【发布时间】:2012-04-03 07:34:40
【问题描述】:

我正在使用 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”,没想到,我得到了不同的结果。

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

【问题讨论】:

  • 你有没有找到这个问题的答案?现在遇到同样的事情。 :(

标签: luajava


【解决方案1】:

冒号把你弄乱了。没有带有两个参数的 sayHello 函数。通过使用冒号,您将“自我”(人)和字符串发送到 java 代码。您没有采用两个参数的 java 方法。只需在 Lua 中使用点而不是冒号即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-30
    • 2018-09-11
    • 2022-01-16
    • 1970-01-01
    • 2015-05-03
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    相关资源
    最近更新 更多