2012-02-02 21 views
0

的線程內創建處理程序我寫了下面的代碼來顯示第一頁,然後5秒鐘後,它將顯示主菜單。但是,我收到了錯誤「無法在未調用looper.prepare()的線程中創建處理程序」。它是什麼以及如何解決它? `運行時錯誤:無法在未調用looper.prepare()

public class LoadingScreen extends Screen{ 
    public LoadingScreen(MBGame game) { 
    super (game); 
    }  
    @Override 
     public void update(float deltaTime) { 
     Graphics g = game.getGraphics(); 
     Assets.firstPage = g.newPixmap("first_page.png", PixmapFormat.RGB565); 
     game.setScreen(new StartupScreen(game)); 
     new AsyncTask<Object, Object, Object>() { 

      protected Object doInBackground(Object... params) { 
       try { 
        Looper.prepare(); 
        Thread.sleep(5000000); 
        Looper.loop(); 

        } catch (InterruptedException e) { 
        // Exception handling 
       } 
       return (Object)null; 
      } 

      protected void onPostExecute(Object result) { 
       // This runs on UI thread 
       game.setScreen(new MainMenuScreen(game)); 

      } 
     }.execute((Object) null);     
    }  
     @Override 
      public void present(float deltaTime) {  
    }  
     @Override 
      public void pause() {  
    }  
     @Override 
      public void resume() {  
    }  
     @Override 
      public void dispose() {   
    } 

} 

謝謝。

回答

0

發生這種情況是因爲AsyncTask管理自己的線程池。你爲什麼不這樣稱呼它:

protected Object doInBackground(Object... params) { 
    try { 
     Thread.sleep(5000000); 
    } catch (InterruptedException e) { 
     // Exception handling 
    } 
    return null; 
} 
+0

你的意思是不使用asynctask,只是調用doinbackground函數?如果那麼,什麼時候有差別? – George 2012-02-04 03:14:23

+0

不,你仍然使用AsyncTask,但不要調用'Looper.prepare()'和'Looper.loop()'。爲了清楚起見,我在答案中省略了其餘的代碼。 – 2012-02-04 08:03:49

相關問題