2016-07-16 52 views
1

當進度條結束時,我想烤麪包(或顯示對話框)。我試着用run()方法if要做到這一點,但它會導致以下錯誤:當進度條完成時做些什麼

Can't create handler inside thread that has not called Looper.prepare() 

我該怎麼辦呢?

這是我的代碼:

@Override 
public void run() { 
    int myProgress = 0, Speed = 50; 
    ProgressBar myProgressBar = (ProgressBar) findViewById(R.id.progressbar); 

    while (myProgress<750){ 
     try{ 
      Thread.sleep(Speed); 
      myProgress++; 
      if (myProgressBar != null) { 
       myProgressBar.setProgress(myProgress); 
      } 
     } 
     catch(Throwable t){ } 
    } 
} 

回答

0
runOnUiThread(new Runnable() { 
     public void run() { 
      //your code here 
     } 
    }); 

變化是這樣的。

runOnUiThread(new Runnable() { 
    public void run() { 
    int myProgress = 0, Speed = 50; 
    ProgressBar myProgressBar = (ProgressBar) findViewById(R.id.progressbar); 

    while (myProgress<750){ 
    try{ 
     Thread.sleep(Speed); 
     myProgress++; 
     if (myProgressBar != null) { 
      myProgressBar.setProgress(myProgress); 
     } 
    } 
    catch(Throwable t){ } 
}  
} 
}); 

工作者線程都是爲了做後臺任務,除非你調用方法一樣runOnUiThread你不能在工作線程中顯示的UI任何東西。如果您嘗試在不調用runOnUiThread的情況下在UI線程上顯示任何內容,則會出現java.lang.RuntimeException。 如果您仍然遇到任何問題,請告訴我。

+0

我不能在我的class.it創建runOnUiThread說需要返回類型。我是否在錯誤的地方做這件事? –

+0

@ahmadmohseni你能證明爲什麼?任何錯誤來了或什麼相同? –

+0

我以不同的方式更改了代碼,現在它可以工作 –

0

我想這和它現在的作品:

public void run() { 
    int myProgress = 0, Speed = 50; 
    ProgressBar myProgressBar = (ProgressBar) findViewById(R.id.progressbar); 
    while (myProgress<750){ 
     try{ 
      Thread.sleep(Speed); 
      myProgress++; 
      if (myProgressBar != null) { 
       myProgressBar.setProgress(myProgress); 
      } 
     } 
     catch(Throwable t){ } 
} 

final int finalMyProgress = myProgress; 

    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      if (finalMyProgress == 750) 
       Toast.makeText(word_guess2.this, "hi", Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 
相關問題