2

ペイントするLibGDXアプリケーションと、クライアントまたはサーバー用のスレッドがあります。接続は Kryonet を使用して行われます。対戦相手が何かを作成すると、メッセージが受信されます linke:

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

LibgdxGdx.app.postRunnable(Runnable r)では、メインの OpenGL コンテキストを持つレンダリング スレッドにコードを実行するように要求するために使用できます。アプリケーションのスレッド化に関する Libgdx wiki を参照してください: https://code.google.com/p/libgdx/wiki/ApplicationThreading

コメントが指摘しているように、一般に Java オブジェクトはスレッドによって「所有」されていません。「OpenGL コンテキスト」は、これに対する例外のようなものです。OpenGL の状態を変更できるスレッドは 1 つだけです。

于 2013-05-26T13:37:30.727 に答える