我有一个用于绘画的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;
}当这个回调被调用时(而且它是正确的),我得到"No OpenGL context found in the current thread“。我认为它正在寻找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;
[....]如何从另一个线程调用该方法?
提前感谢
发布于 2013-05-26 21:37:31
在Libgdx中,你可以使用Gdx.app.postRunnable(Runnable r)请求主要的OpenGL-context-有渲染线程来运行一些代码。有关应用程序线程的信息,请参阅Libgdx wiki:https://code.google.com/p/libgdx/wiki/ApplicationThreading
正如注释所指出的,Java对象通常不为线程“所有”。"OpenGL context“在某种程度上是一个例外,因为只允许一个线程更改OpenGL状态。
https://stackoverflow.com/questions/16759670
复制相似问题