JPanel中的无限循环

时间:2012-11-22 11:24:43

标签: java eclipse jframe jpanel

我想编写一个简单的Snake。 因此,我编写了一个自定义JPanel,可以容纳SceneScene只是绘制了一些内容,您可以使用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线程。 它不再出现了。

谁能告诉我为什么?

1 个答案:

答案 0 :(得分:3)

启动线程但是直接调用它的run方法,因此你在无限循环中阻止事件线程 - 尝试启动它通过调用start()代替。

另外请务必阅读Qwerky指出的Swing应用程序中的多线程。