2011-11-23 2 views
0

나는 다음과 같은 로그 캣 출력을 받고 있어요 :왜 내 앱이 널 포인터 예외로 인해 충돌을 일으키는 지?

11-22 20:57:01.394: E/MediaPlayer(1647): error (1, 0) 
11-22 20:57:01.404: D/MediaPlayer(1647): create failed: 
11-22 20:57:01.404: D/MediaPlayer(1647): java.io.IOException: Prepare failed.: status=0x1 
11-22 20:57:01.404: D/MediaPlayer(1647): at android.media.MediaPlayer.prepare(Native Method) 
11-22 20:57:01.404: D/MediaPlayer(1647): at android.media.MediaPlayer.create(MediaPlayer.java:668) 
11-22 20:57:01.404: D/MediaPlayer(1647): at com.jesse.abc.Apple.onCreate(Apple.java:25) 
11-22 20:57:01.404: D/MediaPlayer(1647): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
11-22 20:57:01.404: D/MediaPlayer(1647): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
11-22 20:57:01.404: D/MediaPlayer(1647): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
11-22 20:57:01.404: D/MediaPlayer(1647): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
11-22 20:57:01.404: D/MediaPlayer(1647): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
11-22 20:57:01.404: D/MediaPlayer(1647): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-22 20:57:01.404: D/MediaPlayer(1647): at android.os.Looper.loop(Looper.java:123) 
11-22 20:57:01.404: D/MediaPlayer(1647): at android.app.ActivityThread.main(ActivityThread.java:3683) 
11-22 20:57:01.404: D/MediaPlayer(1647): at java.lang.reflect.Method.invokeNative(Native Method) 
11-22 20:57:01.404: D/MediaPlayer(1647): at java.lang.reflect.Method.invoke(Method.java:507) 
11-22 20:57:01.404: D/MediaPlayer(1647): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
11-22 20:57:01.404: D/MediaPlayer(1647): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
11-22 20:57:01.404: D/MediaPlayer(1647): at dalvik.system.NativeStart.main(Native Method) 
11-22 20:57:01.414: D/AndroidRuntime(1647): Shutting down VM 
11-22 20:57:01.414: W/dalvikvm(1647): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
11-22 20:57:01.414: E/AndroidRuntime(1647): FATAL EXCEPTION: main 
11-22 20:57:01.414: E/AndroidRuntime(1647): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.jesse.abc/com.jesse.abc.Apple}: java.lang.NullPointerException 
11-22 20:57:01.414: E/AndroidRuntime(1647):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 
11-22 20:57:01.414: E/AndroidRuntime(1647):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
11-22 20:57:01.414: E/AndroidRuntime(1647):  at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
11-22 20:57:01.414: E/AndroidRuntime(1647):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
11-22 20:57:01.414: E/AndroidRuntime(1647):  at android.os.Handler.dispatchMessage(Handler.java:99) 
11-22 20:57:01.414: E/AndroidRuntime(1647):  at android.os.Looper.loop(Looper.java:123) 
11-22 20:57:01.414: E/AndroidRuntime(1647):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
11-22 20:57:01.414: E/AndroidRuntime(1647):  at java.lang.reflect.Method.invokeNative(Native Method) 
11-22 20:57:01.414: E/AndroidRuntime(1647):  at java.lang.reflect.Method.invoke(Method.java:507) 
11-22 20:57:01.414: E/AndroidRuntime(1647):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
11-22 20:57:01.414: E/AndroidRuntime(1647):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
11-22 20:57:01.414: E/AndroidRuntime(1647):  at dalvik.system.NativeStart.main(Native Method) 
11-22 20:57:01.414: E/AndroidRuntime(1647): Caused by: java.lang.NullPointerException 
11-22 20:57:01.414: E/AndroidRuntime(1647):  at com.jesse.abc.Apple.onCreate(Apple.java:32) 
11-22 20:57:01.414: E/AndroidRuntime(1647):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
11-22 20:57:01.414: E/AndroidRuntime(1647):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
11-22 20:57:01.414: E/AndroidRuntime(1647):  ... 11 more 
11-22 20:57:02.934: I/Process(1647): Sending signal. PID: 1647 SIG: 9 

이 내 코드입니다 :

내 매니페스트 및 레이아웃 파일을 확인 있다고 확신합니다. 오류는 줄 32 (myPlayer.start();)를 가리 킵니다. 충돌이 테스트 중에 반복적으로 작업간에 전환 할 때만 발생합니다. 어떤 도움을 주시면 감사하겠습니다.

package com.jesse.abc; 

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageButton; 

public class Car extends Activity{ 

MediaPlayer mPlayer; 
MediaPlayer myPlayer; 

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

    mPlayer = MediaPlayer.create(this, R.raw.button_sound1); 
    myPlayer = MediaPlayer.create(this, R.raw.carsound); 
    final Button bButton = (Button)findViewById(R.id.cbackbutton); 
    final Button nButton = (Button)findViewById(R.id.cnextbutton); 
    final ImageButton cButton = (ImageButton)findViewById(R.id.cButton); 
    final Context ctx = this; 

    myPlayer.start(); 



    bButton.setOnClickListener(new View.OnClickListener() { 

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

      mPlayer.start(); 
      Intent myIntent = new Intent(v.getContext(), Ball.class); 
      ctx.startActivity(myIntent); 
      myPlayer.release(); 

     } 
    }); 

    nButton.setOnClickListener(new View.OnClickListener() { 

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

      mPlayer.start(); 
      Intent myIntent2 = new Intent(v.getContext(), Duck.class); 
      ctx.startActivity(myIntent2); 
      myPlayer.release(); 

     } 
    }); 

    cButton.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      myPlayer.start(); 

     } 
    }); 


} 
@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    // TODO Auto-generated method stub 

    if(keyCode==KeyEvent.KEYCODE_BACK){ 

     this.startActivity(new Intent(Car.this, StartingPoint.class)); 
     myPlayer.release(); 
     finish(); 

    } 
    return true; 
} 



} 

답변

3

예, 확실히 충돌합니다.

 myPlayer.release(); 
     myPlayer=null; 
     myPlayer.start(); 

@Override 
protected void onPause() { 
    // TODO Auto-generated method stub 
    super.onPause(); 
    myPlayer.release(); 
    myPlayer=null; 
    finish(); 
} 

개체 myPlayernull, 그래서 그것은 :

0

당신은 당신의 자신의 질문에 대답 충돌합니다. myPlayer는 null입니다. 디버그하고 그 라인까지 모든 단계, myPlayer 위로 마우스를 가져 가면 null입니까? 앱에서 전환 할 때 전환이 발생했다면 전환 한 다음 다시 돌아와서 해당 행까지 디버그해야 할 수도 있습니다.

+0

혼란스럽게 생각합니다.하지만 디버깅하는 동안 그 줄을 추가했습니다. 왜 그것이 부서지고 있는지를 알아 내려고하면서 내가했던 마지막 일이었습니다. 원래 코드로 다른 클래스를 게시 할 것입니다. – jessenave

관련 문제