2012-12-15 44 views
0

我有一個線程,我在其中捕獲異常。我想要的是當發生這種情況時,線程關閉/退出/死亡或我應該說的任何事情,並顯示一個警告對話框(不像敬酒!)。Android:強制一個線程關閉並顯示一個警告對話框

這裏是我的代碼:

t1 = new Thread(new Runnable() 
    { 
     public void run() 
     { 
      Looper.prepare(); 
      StringBuffer stringBuffer = new StringBuffer(""); 
      BufferedReader bufferedReader = null; 
      URI uri = null; 

      try 
      { 
       requestAndMakeSheet(stringBuffer, bufferedReader, uri); 
      } 
      catch (Exception e) 
      { 
       //Toast.makeText(getBaseContext(), "Web Request Error", Toast.LENGTH_LONG).show(); 
       //Log.e("Web Request Error", e.getMessage()); 
       t1.interrupt(); 
       AlertDialog.Builder parsingErrorBox = new AlertDialog.Builder(ReservationInfo.this); 
       parsingErrorBox.setTitle("Login error"); 
       parsingErrorBox.setMessage("You may have to check your credentials and then try again."); 
       parsingErrorBox.show(); 
      } 
      finally 
      { 
       if (bufferedReader!=null) 
       { 
        try 
        { 
         bufferedReader.close(); 
        } 
        catch (IOException ioe) 
        { 
         Log.e("Web Request Error", ioe.getMessage()); 
        } 
       } 
      } 
     }   
    }); 
    t1.start(); 
    try 
    { 
     t1.join(); 
     mWebview.loadUrl("file:///"+Environment.getExternalStorageDirectory()+"/MySheet.html"); 
     setContentView(mWebview); 
    } 
    catch (InterruptedException e) 
    { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    //End of le thread 
} 

此代碼崩潰,我認爲這是與t1.interrupt(試圖停止代替,但也不能工作)。

我該如何解決這段代碼? 預先感謝您。

+0

發佈您的LogCat錯誤,它通常解釋到底發生了什麼。你也應該通過你的舊問題並接受最好的答案,人們志願幫助你,請用這個簡單的手勢「報答」他們。 – Sam

+0

12-15 01:27:34.619:W/HardwareRenderer(14911):嘗試初始化主線程外部的硬件加速,正在中止 12-15 01:28:34.404:I/dalvikvm(14911):threadid = 3:反應以信號3 1月12日至15日:28:34.474:I/dalvikvm(14911):寫堆棧跟蹤到 '/data/anr/traces.txt' 這就是它說。但是我的應用中有很多事情發生錯誤。當requestAndMakeSheet引發異常時,該文件應該不會顯示在webview中,但實際上它會加載它(它會加載先前的文件join())。另外,當它拋出異常時,活動凍結! – user1881815

+0

您可以隨時通過調試器逐行瀏覽代碼,以縮小問題的根源。你也可以在你的catch塊中使用'e.printStackTrace()'來查看錯誤細節。除此之外,什麼是'requestAndMakeSheet()'? – Sam

回答

0

爲什麼你有t1.interrupt()呢?似乎你的線程將被終止,無論如何,把它放在那裏的原因是什麼?

+0

因爲我認爲如果我沒有,消息框永遠不會出現。 – user1881815

相關問題