【问题标题】:Android java.lang.IllegalArgumentException: View not attached to window managerAndroid java.lang.IllegalArgumentException:视图未附加到窗口管理器
【发布时间】:2012-06-09 13:22:20
【问题描述】:

我的代码中出现以下异常...

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();
    }
};

【问题讨论】:

  • 你写的代码很危险,如果你在线程还在运行的时候离开activity,线程结束时会出现错误并关闭对话框。
  • @dreamtale 你能详细说明一下吗,谢谢。

标签: java android android-view illegalargumentexception


【解决方案1】:

我已经修改了你的代码。看下面的sn-p。

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();
            }
        };

【讨论】:

  • 我不能 100% 确定此 progressDialog.dismiss() 指示的行错误是否与该部分有关。“public void callDialog(){”是否导致“IllegalArgumentException: View not attach to window经理”错误?谢谢。
【解决方案2】:

有时当我从 onPostExecute 方法关闭对话框并完成活动时,我也会收到此错误。我想有时活动会在对话框成功关闭之前完成。

试试下面的代码,它会对你有所帮助。

try{

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

}
catch(Exception e)
{
   e.printStackTrace();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 2014-05-20
    • 2011-01-14
    • 1970-01-01
    • 2013-11-01
    • 1970-01-01
    相关资源
    最近更新 更多