我想编写一个简单的Snake。
因此,我编写了一个自定义JPanel
,可以容纳Scene
。
Scene
只是绘制了一些内容,您可以使用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线程。 它不再出现了。
谁能告诉我为什么?
答案 0 :(得分:3)
你不启动线程但是直接调用它的run
方法,因此你在无限循环中阻止事件线程 - 尝试启动它通过调用start()
代替。
另外请务必阅读Qwerky指出的Swing应用程序中的多线程。