Java 从另一个线程中的对象运行方法
我有一个LibGDX应用程序,我在其中绘制和一个用于客户端或服务器的线程。连接使用Kryonet完成。当你的对手创建或执行某项操作时,会收到一条消息,因此:Java 从另一个线程中的对象运行方法,java,multithreading,opengl,libgdx,kryonet,Java,Multithreading,Opengl,Libgdx,Kryonet,我有一个LibGDX应用程序,我在其中绘制和一个用于客户端或服务器的线程。连接使用Kryonet完成。当你的对手创建或执行某项操作时,会收到一条消息,因此: public void received(Connection con, Object object) { TroopMessage tm = (TroopMessage)object;
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;
[....]
如何从另一个线程调用该方法
提前感谢在Libgdx中,您可以使用
Gdx.app.postRunnable(Runnable r)
请求具有渲染线程的主OpenGL上下文运行一些代码。请参见以下关于应用程序线程的Libgdx wiki:
正如注释所指出的,Java对象通常不被线程“拥有”。“OpenGL上下文”是一个例外,因为只允许一个线程对OpenGL状态进行更改。在Libgdx中,可以使用
Gdx.app.postRunnable(Runnable r)
请求具有渲染线程的主OpenGL上下文运行一些代码。请参见以下关于应用程序线程的Libgdx wiki:
正如注释所指出的,Java对象通常不被线程“拥有”。“OpenGL上下文”是一个例外,因为只允许一个线程更改OpenGL状态。一个
对象不属于或不存在于特定线程中,因此这不是问题所在。您尝试过搜索吗?是的,我看到了,但是他们说“所以你只能从同一个线程访问这个上下文”。我该怎么做?一个对象不属于或不存在于特定的线程中,因此这不是问题所在。您尝试过搜索吗?是的,我看到了,但是他们说“所以你只能从同一个线程访问这个上下文”。我该怎么做?