2012-06-05 53 views
3

我得到在我的代码如下例外...的Android java.lang.IllegalArgumentException异常:查看未连接到窗口管理器

IllegalArgumentException: View not attached to window manager 
at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:355) 
at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:200) 
at android.view.Window$LocalWindowManager.removeView(Window.java:432) 
at android.app.Dialog.dismissDialog(Dialog.java:280) 
at android.app.Dialog.access$000(Dialog.java:73) 
at android.app.Dialog$1.run(Dialog.java:113) 
at android.app.Dialog.dismiss(Dialog.java:270) 
at com.myapp.code.SearchWord$1.handleMessage(SearchWord.java:718) <-- 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:130) 
at android.app.ActivityThread.main(ActivityThread.java:3906) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:507) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:840) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:598) 

我真的不明白,为什么这个错误发生。它会导致设备上的强制关闭问题。有关如何解决此问题的任何线索?由于

这是我的代码...

public class SearchWord extends Activity { 
/** Called when the activity is first created. */ 

private ProgressDialog progressDialog; 
     ... 
    } 

    public void callDialog(){ 

    this.progressDialog = ProgressDialog.show(SearchWord.this,null, "Loading. Please wait..", true); 

    new Thread(new Runnable(){ 
     public void run(){ 
      try{ 
       Thread.sleep(9000); 
      } 
      catch (Exception e){ 
       e.printStackTrace(); 
      } 
      if(copyFlag){ 

      } 
          else{ 
       getData(); 
      } 
      SearchWord.this.handler.sendEmptyMessage(0); 
     } 

    }).start(); 
} 

    Handler handler = new Handler(){ 
    public void handleMessage(Message msg){ 
     progressDialog.dismiss();   <-- line 718 
     SetData(); 
    } 
}; 
+0

您编写的代码是危险的,如果在线程仍在运行时离开活动,则线程完成并关闭对话框时将发生错误。 – dreamtale

+0

@dreamtale请你详细说明一下,谢谢。 – dpark123

回答

1

我已经修改了以下片断您code.Look。

public void callDialog(){ 

      ProgressDialog progressDialog = new ProgressDialog(this); 
      progressDialog.setTitle("Loading. Please wait.."); 
      progressDialog.setCancelable(false); 
      progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
       progressDialog.show(); 

      new Thread(new Runnable(){ 
       public void run(){ 
        try{ 
         Thread.sleep(9000); 
        } 
        catch (Exception e){ 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
        if(copyFlag){ 
        }else{ 
         getData(); 
        } 
        SearchWord.this.handler.sendEmptyMessage(0); 
       } 

      }).start(); 
     } 
      // omitted 

      Handler handler = new Handler(){ 
      @Override 
      public void handleMessage(Message msg){ 
       progressDialog.dismiss();   
       SetData(); 
      } 
     }; 
+0

我不是100%确定这个progressDialog.dismiss()指出的行错误是否与该部分有关。“public void callDialog(){” 导致“IllegalArgumentException:视图不附加到窗口管理器”错误?谢谢。 – dpark123

1

我也有时得到这个错误有时当我关闭对话框并完成onPostExecute方法的活动。我猜有时活动会在对话成功解散之前完成。

尝试下面的代码,它会帮助你。

try{ 

pd.dismiss(); 
// Then assign progress Dialog to null 
pd = null; 

} 
catch(Exception e) 
{ 
    e.printStackTrace(); 
} 
相关问题