0

我想编写一个简单的 Snake。因此,我编写了一个自定义JPanel,它可以容纳一个Scene. AScene只是画了一些东西,你可以用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 回答