Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从另一个线程中的对象运行方法_Java_Multithreading_Opengl_Libgdx_Kryonet - Fatal编程技术网

Java 从另一个线程中的对象运行方法

Java 从另一个线程中的对象运行方法,java,multithreading,opengl,libgdx,kryonet,Java,Multithreading,Opengl,Libgdx,Kryonet,我有一个LibGDX应用程序,我在其中绘制和一个用于客户端或服务器的线程。连接使用Kryonet完成。当你的对手创建或执行某项操作时,会收到一条消息,因此: public void received(Connection con, Object object) { TroopMessage tm = (TroopMessage)object;

我有一个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;
[....]
如何从另一个线程调用该方法


提前感谢

在Libgdx中,您可以使用
Gdx.app.postRunnable(Runnable r)
请求具有渲染线程的主OpenGL上下文运行一些代码。请参见以下关于应用程序线程的Libgdx wiki:


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

在Libgdx中,可以使用
Gdx.app.postRunnable(Runnable r)
请求具有渲染线程的主OpenGL上下文运行一些代码。请参见以下关于应用程序线程的Libgdx wiki:


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

一个
对象不属于或不存在于特定线程中,因此这不是问题所在。您尝试过搜索吗?是的,我看到了,但是他们说“所以你只能从同一个线程访问这个上下文”。我该怎么做?一个
对象
不属于或不存在于特定的线程中,因此这不是问题所在。您尝试过搜索吗?是的,我看到了,但是他们说“所以你只能从同一个线程访问这个上下文”。我该怎么做?