2014-04-27 65 views
-1

我曾經在一個項目中創建一個新的線程有這個代碼:的java的RuntimeException

battleStart = new Thread(new Runnable(){ 
     @Override 
     public void run() { 
      while(compteur<50){ 
       BattleStart.draw(0,0); 
       try { 
        Thread.sleep(10); 
       } catch (InterruptedException e) {e.printStackTrace();} 
       compteur++; 
      } 
     } 
    }); 

,但我得到這個異常:異常的線程「主題-3」了java.lang.RuntimeException :在當前線程中找不到OpenGL上下文。 我應該怎麼做來解決這樣的例外?

回答

2

你可能無法。多線程(see this thread)不受支持。

您可能會發現一個解決方法,它有很多自定義代碼(請參閱herehere),但您應該首先重新考慮您的設計。真的有必要在自己的線程中運行此代碼嗎?因爲從不同的線程獲取相同的上下文似乎是一個非常糟糕的主意,我不能真正想到我想要這樣做的情況(它不會提高性能並使代碼更難讀取和維護)。

+0

THX對此事發表評論,但我想我真的需要繪製一些圖形在不同的線程,因爲我需要一些並行圖紙... – user3578325

+1

蒂姆是正確的,特別是如果你使用光滑。應該不需要創建額外的線程,因爲遊戲是基於步驟的。即使你試圖同時畫兩樣東西,也是沒有道理的。在您的更新方法中,您將執行必要的邏輯,然後在您的渲染方法中,使用更新的數據繪製任何圖像。一幀一幀。 – Samich

+0

而在第二個音符,我相信你所要完成的(基於這樣你的代碼看起來)什麼涉及時間步,你可以利用在每次更新間隔幀更新增量時間和金額;一旦隨着時間的推移增加了delta次數而達到了特定的數字,你可以有一個if語句觸發。 – Samich