2013-01-09 54 views
0

下面的代碼是錯誤來自的地方。我想要的是在loginRedirectCheck爲真後調出loginDialog1。但不是顯示progressDialog,應用程序崩潰。我做錯了什麼?我該如何解決它?謝謝。Rundable with progressdialog crash

Runnable myRunnable = new Runnable() { 
    @Override 
    public void run() { 
     while(loginCheck){ 
      if(loginRedirectCheck){ 
       loginCheck = false; 
       new Handler().post(new Runnable() { 
        @Override 
        public void run() { 
         loginDialog1.show(); 
        } 
       }); 
      } 
     } 
    } 
}; 

Thread myThread = new Thread(myRunnable); 
myThread.start(); 
+0

這是Eclipse RCP的?你需要堅持UI線程。 「應用程序崩潰」是什麼意思?一個應用程序不會簡單地崩潰,必須有一個例外。找到它。 – THarms

+0

它是eclipse IDE,堅持ui線程在這種情況下是指onCreate? – Sam

+0

拋棄異常:SurfaceTexture? – Sam

回答

0

我做錯了什麼?

是的,您正在創建新線程內的Handler。這會導致在其中執行已發佈的Runnables,導致在新線程中執行loginDialog1.show();,但我想它必須在UI線程中執行。

我該如何解決?

創建處理程序的UI線程內(例如,作爲含有myThrad.start()您的對象的實例變量)和post()您的可運行到該處理程序,而不是一個新創建的一個。

編輯:

我覺得你的情況最終的局部變量就可以了:

final Handler myHandler = new Handler(); 

Runnable myRunnable = new Runnable() { 
[...] 
       loginCheck = false; 
       myHandler.post(new Runnable() { 
        @Override 
[...] 
+0

在這種情況下,他也可以刪除外部的Runnable並使用「new Handler()。...」部分。 – THarms

+0

好點,雖然它取決於他是否真的向我們展示了他的所有代碼或其他線程是什麼......但我同意他應該考慮這一點。 – Matmarbon