2012-11-22 83 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