我得到这个错误。 msg:“泄漏了最初在此处添加的窗口”。
我有以下代码:

ball.java:

    ...


  if(current_ball.physx.position.distance2(renderer.gPlayer.physx.position) <= (graphics.SQUARE_SIZE-4)*2)

            {
                if(renderer.gSnd_GameOver!=0 && renderer.bUseSound) renderer.gSndPool.play(renderer.gSnd_GameOver, 1, 1, 0, 0, 1);
                renderer.bIsGameOver = true;

                Message msg = new Message();
                msg.what = newgame.STATE_GAMEOVER;
                newgame.handler.sendMessage(msg);
                return;
            }


下一个,
在newgame.java活动中,我有:

    static DialogInterface.OnClickListener dialogClickListener = new
    DialogInterface.OnClickListener() {

    public void onClick(DialogInterface dialog, int which)
    {
        Intent intent = null;

        switch (which){
        case DialogInterface.BUTTON_POSITIVE:

            dialog.dismiss();
            ((Activity) newgame.gNewGameContext).finish();
            intent = new Intent ( newgame.gNewGameContext , newgame.class );
            newgame.gNewGameContext.startActivity( intent );
            Log.d("redwing", "YES button ... successfuly processed, new intent starded.");

            break;

        case DialogInterface.BUTTON_NEGATIVE:


            dialog.dismiss();
            ((Activity) newgame.gNewGameContext).finish();
            Log.d("redwing", "NO button ... successfuly processed, current intent was closed.");
            break;
        }
    }


并在GameOver时收到消息(如上面的代码中所述,在ball.java中生成了消息)……并使用此问题“ PlayAgain?”实例化了一个新的警报对话框。 (请注意,此HANDLER存在,并且是在newgame.java中创建的):

    public static Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);


        switch(msg.what)
        {
            case newgame.STATE_GAMEOVER:

                AlertDialog.Builder builder = new AlertDialog.Builder(newgame.gNewGameContext);
                builder.setCancelable(false);
                builder.setTitle("GaMeOvEr");
                builder.setIcon(R.drawable.ic_launcher);
                builder.setMessage("Play again ?").setPositiveButton("Yes", dialogClickListener)
                                                    .setNegativeButton("No" , dialogClickListener).show();
             break;
        }

    }
};


...还可以在newgame.java(在onCreate中)中这样设置“ newgame.gNewGameContext”:

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


    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN );
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

    gNewGameContext = this;
    ......


要审查,我这样做:


当gameover = true时,我向处理程序发送一条消息。
处理程序会收到gameover msg。并实例化一个新的警报框
如果用户在此警报框中按下“否”按钮,我将收到“已泄漏的窗口
最初是在这里添加的”错误!:(


请帮助,我不知道该如何解决。
谢谢 !

最佳答案

造成这种情况的主要原因可能是因为您试图在关闭对话框之前就已经完成了创建对话框的活动。显然,由于对话框没有对实际创建对话框的任何引用,因此会出现此问题。考虑以处理代码的方式更改代码。

09-30 11:37