Java JPanel中的无限循环
我想编程一条简单的蛇。 因此,我编写了一个定制的Java JPanel中的无限循环,java,eclipse,jframe,jpanel,Java,Eclipse,Jframe,Jpanel,我想编程一条简单的蛇。 因此,我编写了一个定制的JPanel,它可以容纳场景。 场景只是绘制一些东西,您可以使用public void run()方法对其执行线程,因此它实现了Runnable 现在,当我初始化场景时,我创建了一个实例的线程 if (this.getThread() == null) { Thread sceneThread = new Thread(this); this.setThread(sceneThread); this.getThread().
JPanel
,它可以容纳场景
。
场景
只是绘制一些东西,您可以使用public void run()
方法对其执行线程,因此它实现了Runnable
现在,当我初始化场景时,我创建了一个实例的线程
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线程。
它不再出现了
有人能告诉我为什么吗?您不是在启动线程,而是直接调用它的run
方法,因此您在无休止的循环中阻塞了事件线程本身-请尝试通过调用start()
来启动它
另外,请务必阅读Qwerky指出的Swing应用程序中的多线程处理。您不是在启动线程,而是直接调用它的run
方法,因此您在无休止的循环中阻塞了事件线程本身-试着通过调用start()
来启动它
另外,请务必阅读Qwerky指出的Swing应用程序中的多线程。您能给出windows线程的代码吗?您是否阅读并理解Swing线程模型如何与事件调度线程一起工作@我只是创建了一个JFramenewgui()代码>,GUI
是一个JFrame
subclass@Qwerky不,实际上我没有,我来看看。因此,我创建它的线程正在等待新线程完成?@nsaddct-很难说没有看到更多的代码。我猜您可能正在阻止EDT或在EDT之外更新UI。您能给出windows线程的代码吗?您是否阅读并理解swing线程模型如何与事件调度线程一起工作@我只是创建了一个JFramenewgui()代码>,GUI
是一个JFrame
subclass@Qwerky不,实际上我没有,我来看看。因此,我创建它的线程正在等待新线程完成?@nsaddct-很难说没有看到更多的代码。我猜你不是在阻止EDT,就是在EDT之外更新UI。