Android.view.WindowManager $ BadTokenException: Невозможно добавить окно – токен null недействителен

Я получаю эту ошибку, когда я пытаюсь запустить класс окна. Я использую отдельный класс, а не только метод внутри моего игрового класса, поэтому мне нужно отключить кнопку «Назад» в этом всплывающем окне. Я вызываю этот класс с помощью кнопки. Этот код отлично работает, если я использую его в своем классе игры, но не в отдельном классе. Вот мой код:

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

Вы не вызываете setContentView(R.layout.myLayout) в свой onCreate(Bundle) . Назовите его сразу после super.onCreate(savedInstanceState); ,

Это на странице ресурса Activity на сайте разработчиков Android:

Существует два метода, которые будут реализованы практически во всех подклассах Activity:

OnCreate (Bundle) – это то, где вы инициализируете свою деятельность. Самое главное, здесь вы обычно вызываете setContentView (int) с ресурсом макета, определяющим ваш пользовательский интерфейс, и используя findViewById (int) для извлечения виджета в этом пользовательском интерфейсе, который необходимо взаимодействовать с программным обеспечением.

OnPause () – это то, где вы имеете дело с пользователем, покидающим вашу деятельность. Самое главное, что любые изменения, сделанные пользователем, должны быть выполнены на этом этапе (обычно для ContentProvider, содержащего данные).

Изменить 1:

Заменить:

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

с:

 new Handler().postDelayed(new Runnable(){ public void run() { pwindow.showAtLocation(popupView, Gravity.CENTER, 0, 0); } }, 100L);