2

我有我在其中绘制的 LibGDX 应用程序和一个用于客户端或服务器的线程。使用 Kryonet 完成连接。当您的对手创建某事时,会收到一条消息,链接如下:

public void received(Connection con, Object object) {

                            TroopMessage tm = (TroopMessage)object;                         
                            fortress.map.addSoldier(tm.kind, true);
                            System.out.println("recieved");

                            connection = con;
}

当这个回调被调用(并且它是正确的)时,我得到“在当前线程中找不到 OpenGL 上下文”。我认为它正在寻找 MyClient 线程中的对象堡垒。我想调用 fortress.map.addSoldier,它指的是当前存在于另一个线程中的对象。

public class Fortress extends Game implements ApplicationListener{
    private OrthographicCamera camera;
    private SpriteBatch batcher;

    public static MyServer server;
    public static MyClient client;

    public static Map map;
[....]

如何从另一个线程调用该方法?

提前致谢

4

1 回答 1

4

在 Libgdx 中,您可以使用Gdx.app.postRunnable(Runnable r)具有 OpenGL 上下文的主渲染线程来运行一些代码。在此处查看有关应用程序线程的 Libgdx wiki:https ://code.google.com/p/libgdx/wiki/ApplicationThreading

正如评论所指出的,通常 Java 对象不是由线程“拥有”的。“OpenGL 上下文”是一个例外,因为只允许一个线程更改 OpenGL 状态。

于 2013-05-26T13:37:30.727 回答