Java android.view.WindowManager$BadTokenException:无法添加窗口—;令牌null无效

Java android.view.WindowManager$BadTokenException:无法添加窗口—;令牌null无效,java,android,Java,Android,每当我尝试启动窗口类时,都会出现此错误。我使用单独的类,而不仅仅是游戏类中的方法,因为我需要禁用弹出窗口上的后退按钮。我正在用按钮给这个班打电话。如果我在我的游戏类中使用它,而不是在单独的类中使用它,那么这段代码可以很好地工作。这是我的密码: public class Popup_pogresno extends Activity implements OnClickListener{ private PopupWindow pwindow; @Override pr

每当我尝试启动窗口类时,都会出现此错误。我使用单独的类,而不仅仅是游戏类中的方法,因为我需要禁用弹出窗口上的后退按钮。我正在用按钮给这个班打电话。如果我在我的游戏类中使用它,而不是在单独的类中使用它,那么这段代码可以很好地工作。这是我的密码:

public class Popup_pogresno extends Activity implements OnClickListener{

    private PopupWindow pwindow;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        LayoutInflater layoutInflater 
         = (LayoutInflater)Popup_pogresno.this
          .getSystemService(LAYOUT_INFLATER_SERVICE);  
        View popupView = layoutInflater.inflate(R.layout.popup, null);  
                 pwindow  = new PopupWindow(popupView, 300, 170, true);

                 Button btnDismiss = (Button)popupView.findViewById(R.id.bPopupOK);
                 btnDismiss.setOnClickListener(new Button.OnClickListener(){

         public void onClick(View v) {
          // TODO Auto-generated method stub
             pwindow.dismiss();
         }});

                 pwindow.showAtLocation(popupView, Gravity.CENTER, 0, 0);

       }

    public void onClick(View v) {
        // TODO Auto-generated method stub

    }
    @Override
    public void onBackPressed() {

    }
}

您没有在
onCreate(Bundle)
方法中调用
setContentView(R.layout.myLayout)
。在
super.onCreate(savedInstanceState)之后立即调用它

这来自Android开发者网站上的活动资源页面:

有两种方法几乎所有的活动子类都将 实施:

onCreate(Bundle)是初始化活动的地方。最重要的是,这里通常使用 布局资源定义您的UI,并使用findViewById(int)来 检索UI中需要与之交互的小部件 以编程方式

onPause()是处理离开活动的用户的地方。最重要的是,此时用户所做的任何更改都应该 提交(通常提交给保存数据的ContentProvider)

编辑1:

替换:

pwindow.showAtLocation(popupView, Gravity.CENTER, 0, 0);
与:


这是错误行:pwindow.showAtLocation(popupView,Gravity.CENTER,0,0);省略对
setContentView
的调用不是错误。在这种情况下,活动将只有一个空视图。这通常并不有用,但也不会阻止弹出窗口显示。@vikram。是的,现在可以用了。某种程度上。我再也看不到错误了,我看到了弹出窗口,但我没有看到背景中的主要活动,我看到了白色的普通屏幕。@marjanbaz是的,这是因为您可能没有为活动设置任何布局(或设置空布局)。我强烈建议你这样做。但是在任何情况下,你想在弹出窗口后面显示什么?嗯,我的游戏活动。这是我的错误答案弹出窗口。用户按OK后,应返回游戏。
new Handler().postDelayed(new Runnable(){

    public void run() {
        pwindow.showAtLocation(popupView, Gravity.CENTER, 0, 0);
    }

}, 100L);