0

簡単なスネークをプログラムしたい。JPanelしたがって、を保持できるカスタムをプログラムしましたSceneSceneaは何かを描画するだけで、public void run()メソッドを使用してスレッド化できるため、を実装しRunnableます。

ここで、シーンを初期化するときにThread、インスタンスのを作成します。

if (this.getThread() == null) {
    Thread sceneThread = new Thread(this);
    this.setThread(sceneThread);
    this.getThread().run();
} else {
    System.err.println("Scene is already running");
}

そして、シーンは最終的に別のスレッドで実行され始めます。

// Run thread
public void run () {
    try {
        while (true) {
            this.update();
            this.getGamePanel().sceneShouldRepaint();

            Thread.sleep(this.getFps());
        }
    }
    catch (Exception e) {
        System.err.println(e);
    }
}

どういうわけか、これはWindowsスレッドをブロックしています。もう表示されません。

誰か教えてもらえますか?

4

1 に答える 1

3

スレッドを開始するのではなく、そのrunメソッドを直接呼び出すため、イベントスレッド自体を無限ループでブロックしています。代わりに呼び出して開始してみてください。start()

さらに、Qwerkyが指摘しているように、Swingアプリケーションのマルチスレッドについて必ずお読みください。

于 2012-11-22T11:42:49.640 に答える