2011-12-21 1 views
1

메신저가 잘못되었습니다. msg : "원래 여기에 추가 된 창을 유출했습니다." 는이 코드를 가지고 :android - 원래 여기에 추가 된 창문이 누출되었습니다. 오류가 발생했습니다. 도와주세요 .. 무엇을 해야할지 잘 모릅니다.

ball.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 (메시지가있을 때이 핸들러 느릅 나무는 메시지를 수신 :

... 


    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 활동 내가 가지고 위의 코드에서 언급 한 ball.java에서 생성됨) ...이 질문과 함께 새로운 경고 대화 상자를 인스턴스화합니다. "PlayAgain?" (이 핸들러가 존재하고이 newgame.java에서 만든 것 참고) :

@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; 
    ......   
:

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.gNewGameContext는"(에서 onCreate에서) newgame.java에서 다음과 같이 설정

내가 이렇게 검토하려면, 내가 핸들러에 메시지를 보내 gameover = 사실

  1. .

  2. 처리기가 게임 오버 메시지를받습니다. 새 경고창을 생성합니다

  3. 사용자가이 경고 상자에서 아니오 버튼을 누르면 "
    원래 여기에 추가 된 창이 유출되었습니다."오류가 발생합니다. 오류! :(

내가이 문제를 해결하는 방법을 잘 모릅니다, 도와주세요. 감사합니다! 당신은 심지어 대화 상자를 생성 한 활동을 마무리하려고하기 때문에

답변

2

이 주된 이유가 될 수 대화 상자를 닫기 전에 대화 상자를 닫으십시오. 대화 상자에 실제로 작성한 활동에 대한 참조가 없으므로이 문제가 발생합니다. 처리되는 방식으로 코드를 변경하십시오.

+0

답장을 보내 주셔서 감사합니다. 내 코드에서 볼 수 있듯이, "dialog.dismiss(); ((Activity) newgame.gNewGameContext) .finish();"이렇게하면 Activity가 종료되기 전에 경고를 닫습니다. 나는 어디로 잘못 갈까? –

+0

Pleasseee 나를 도와주세요, 어떤 ideeas ?? 나는 일주일 이상 이걸로 붙어있다 ... :( –

+0

그래서이 오류는 누름 버튼을 누르는 동안에 만 발생한다. 그래서 네가 negative 버튼에서 finish()를 제거하고 보았는가? –

0

음 ... 적어도 지금까지는 작동해야합니다.

방금 ​​앱을 거의 실행하지 않았습니다 (10-20 회).

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(); 
       this.removeMessages(newgame.STATE_GAMEOVER); 
      break; 
     } 


    } 
}; 

: 결과 사실 GameOver =이 여기 변경 (어쩌면 다른 사람을 도움이 될 것입니다)와 코드가있을 때 나는 처리기에서 대기중인 메시지를 삭제했습니다 (즉, 어떤 충돌)

좋은 없습니다 ..이 코드 줄을 추가했습니다 (처리기의 메시지 큐를 지우십시오).
"this.removeMessages (newgame.STATE_GAMEOVER);"

이것이 해결책인지는 모르지만 지금까지는 작동합니다.
다시 한 번 감사드립니다.

좋아, 내가 발견 한 또 다른 점은 이것이다 :

내 전화, 윈도우 작업 관리자 같은에 설치된 응용 프로그램이 있습니다. 이 응용 프로그램으로 얼마나 많은 메모리 내 애플 리케이션을 볼 수 있습니다. 사용, CPU 등(모니터링 애플 리케이션)
하지만 내 게임 애플 리케이션을 종료합니다. 그리고 TaskManager를 실행하면 내 애플 것으로 나타났습니다. 아직 실행 중이지만 "절전"모드입니다. 이게 정상인가요?

감사합니다.

관련 문제