Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPanel中的无限循环_Java_Eclipse_Jframe_Jpanel - Fatal编程技术网

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线程模型如何与事件调度线程一起工作@我只是创建了一个JFrame
newgui()
GUI
是一个
JFrame
subclass@Qwerky不,实际上我没有,我来看看。因此,我创建它的线程正在等待新线程完成?@nsaddct-很难说没有看到更多的代码。我猜您可能正在阻止EDT或在EDT之外更新UI。您能给出windows线程的代码吗?您是否阅读并理解swing线程模型如何与事件调度线程一起工作@我只是创建了一个JFrame
newgui()
GUI
是一个
JFrame
subclass@Qwerky不,实际上我没有,我来看看。因此,我创建它的线程正在等待新线程完成?@nsaddct-很难说没有看到更多的代码。我猜你不是在阻止EDT,就是在EDT之外更新UI。