2012-11-22 40 views
0

我想编写一个简单的Snake。 因此我编写了一个自定义JPanel,它可以容纳一个Scene。 A Scene只是绘制了一些东西,并且可以使用public void run()方法进行线程化,所以它实现RunnableJPanel中的无限循环

现在,当我初始化场景时,我创建了一个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

你可以给Windows线程的代码? –

+0

您是否已阅读并理解摆动线程模型如何与事件分派线程一起工作? http://docs.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html – Qwerky

+0

@IshanKhanna我刚刚创建了一个新的GUI();','GUI'是一个'JFrame'子类 – NSAddict

回答

3

您是启动线程而是直接调用它run方法,这样你阻止事件线程本身死循环 - 试图通过调用start(),而不是开始它。

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

+0

哦,对,就像往常一样,我是一个白痴:D – NSAddict

+1

非常感谢您的帮助 – NSAddict