2012-12-15 37 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

相关问题