Android 从另一个类启动静态媒体播放器时,程序崩溃

Android 从另一个类启动静态媒体播放器时,程序崩溃,android,static,media-player,Android,Static,Media Player,我有一个包含静态媒体播放器的类,但当我尝试在另一个活动中启动媒体播放器时,程序停止工作,我无法在日志中看到原因。这是我的第一个活动,我从中访问静态媒体播放器: public class MainActivity extends Activity { TimerClass t = new TimerClass(); Button start, end, nextclass; @Override protected void onCreate(Bundle savedInstanceSta

我有一个包含静态媒体播放器的类,但当我尝试在另一个活动中启动媒体播放器时,程序停止工作,我无法在日志中看到原因。这是我的第一个活动,我从中访问静态媒体播放器:

public class MainActivity extends Activity {

TimerClass t = new TimerClass();
Button start, end, nextclass;




@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    start = (Button) findViewById(R.id.buttStart);
    end = (Button) findViewById(R.id.buttEnd);
    nextclass = (Button) findViewById(R.id.buttNext);


    //THIS IS WHERE I ATTEMPT TO START THE MEDIA PLAYER, PRESSING THIS BUTTON CAUSES THE PROGRAM TO STOP WORKING
    start.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            TimerClass.playr.start();

        }

    });


    end.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            TimerClass.handler.removeCallbacks(t.getRunnable());
            TimerClass.num =0;
            TimerClass.playr.stop();
        }

    });



    nextclass.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            Intent openNext = new Intent("com.example.testingtime.CLASS2");
            startActivity(openNext);

        }

    });

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}
 public class TimerClass extends Activity {

 public static MediaPlayer playr;


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


    playr = MediaPlayer.create(TimerClass.this ,R.raw.click);
}


static int num =0;
public static Handler handler = new Handler();


    public static Runnable runnable = new Runnable() {

        public void run() {

            playr.start();

            System.out.println("Num is "+num);
            num++;
            handler.postDelayed(runnable, 10000);
        }

    };


    public Runnable getRunnable(){

    return runnable; 
    }
}
}

下面是包含媒体播放器的类:

public class MainActivity extends Activity {

TimerClass t = new TimerClass();
Button start, end, nextclass;




@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    start = (Button) findViewById(R.id.buttStart);
    end = (Button) findViewById(R.id.buttEnd);
    nextclass = (Button) findViewById(R.id.buttNext);


    //THIS IS WHERE I ATTEMPT TO START THE MEDIA PLAYER, PRESSING THIS BUTTON CAUSES THE PROGRAM TO STOP WORKING
    start.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            TimerClass.playr.start();

        }

    });


    end.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            TimerClass.handler.removeCallbacks(t.getRunnable());
            TimerClass.num =0;
            TimerClass.playr.stop();
        }

    });



    nextclass.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            Intent openNext = new Intent("com.example.testingtime.CLASS2");
            startActivity(openNext);

        }

    });

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}
 public class TimerClass extends Activity {

 public static MediaPlayer playr;


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


    playr = MediaPlayer.create(TimerClass.this ,R.raw.click);
}


static int num =0;
public static Handler handler = new Handler();


    public static Runnable runnable = new Runnable() {

        public void run() {

            playr.start();

            System.out.println("Num is "+num);
            num++;
            handler.postDelayed(runnable, 10000);
        }

    };


    public Runnable getRunnable(){

    return runnable; 
    }
}
这是我的日志:

03-22 23:47:56.699: E/Trace(13723): error opening trace file: No such file or directory (2)
03-22 23:47:56.969: I/Adreno200-EGL(13723): <qeglDrvAPI_eglInitialize:299>: EGL 1.4 QUALCOMM build: AU_LINUX_ANDROID_JB_REL_RB1.04.01.01.06.043_msm7627a_JB_REL_RB1.2_Merge_release_AU (Merge)
03-22 23:47:56.969: I/Adreno200-EGL(13723): Build Date: 12/10/12 Mon
03-22 23:47:56.969: I/Adreno200-EGL(13723): Local Branch: 
03-22 23:47:56.969: I/Adreno200-EGL(13723): Remote Branch: m/jb_rel_rb1.2
03-22 23:47:56.969: I/Adreno200-EGL(13723): Local Patches: NONE
03-22 23:47:56.969: I/Adreno200-EGL(13723): Reconstruct Branch: NOTHING
03-22 23:48:02.009: W/dalvikvm(13723): threadid=1: thread exiting with uncaught exception (group=0x41ce5450)
03-22 23:48:02.019: E/AndroidRuntime(13723): FATAL EXCEPTION: main
03-22 23:48:02.019: E/AndroidRuntime(13723): java.lang.NullPointerException
03-22 23:48:02.019: E/AndroidRuntime(13723):    at com.example.testingtime.MainActivity$1.onClick(MainActivity.java:39)
03-22 23:48:02.019: E/AndroidRuntime(13723):    at android.view.View.performClick(View.java:4129)
03-22 23:48:02.019: E/AndroidRuntime(13723):    at android.view.View$PerformClick.run(View.java:17143)
03-22 23:48:02.019: E/AndroidRuntime(13723):    at android.os.Handler.handleCallback(Handler.java:615)
03-22 23:48:02.019: E/AndroidRuntime(13723):    at android.os.Handler.dispatchMessage(Handler.java:92)
03-22 23:48:02.019: E/AndroidRuntime(13723):    at android.os.Looper.loop(Looper.java:137)
03-22 23:48:02.019: E/AndroidRuntime(13723):    at android.app.ActivityThread.main(ActivityThread.java:4802)
03-22 23:48:02.019: E/AndroidRuntime(13723):    at java.lang.reflect.Method.invokeNative(Native Method)
03-22 23:48:02.019: E/AndroidRuntime(13723):    at java.lang.reflect.Method.invoke(Method.java:511)
03-22 23:48:02.019: E/AndroidRuntime(13723):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:813)
03-22 23:48:02.019: E/AndroidRuntime(13723):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:580)
03-22 23:48:02.019: E/AndroidRuntime(13723):    at dalvik.system.NativeStart.main(Native Method)
03-22 23:47:56.699:E/Trace(13723):打开跟踪文件时出错:没有这样的文件或目录(2)
03-22 23:47:56.969:I/Adreno200 EGL(13723):EGL 1.4高通公司版本:AU_LINUX_ANDROID_JB_REL_RB1.04.01.01.06.043_msm7627a_JB_REL_RB1.2_Merge_REL_RB1.2_发布(Merge)
03-22 23:47:56.969:I/Adreno200 EGL(13723):建造日期:12/10/12周一
03-22 23:47:56.969:I/Adreno200 EGL(13723):当地分行:
03-22 23:47:56.969:I/Adreno200 EGL(13723):远程分支:m/jb_rel_rb1.2
03-22 23:47:56.969:I/Adreno200 EGL(13723):局部贴片:无
03-22 23:47:56.969:I/Adreno200 EGL(13723):重建分支:无
03-22 23:48:02.009:W/dalvikvm(13723):threadid=1:线程以未捕获异常退出(组=0x41ce5450)
03-22 23:48:02.019:E/AndroidRuntime(13723):致命异常:主
03-22 23:48:02.019:E/AndroidRuntime(13723):java.lang.NullPointerException
03-22 23:48:02.019:E/AndroidRuntime(13723):位于com.example.testingtime.MainActivity$1.onClick(MainActivity.java:39)
03-22 23:48:02.019:E/AndroidRuntime(13723):在android.view.view.performClick(view.java:4129)上
03-22 23:48:02.019:E/AndroidRuntime(13723):在android.view.view$PerformClick.run(view.java:17143)
03-22 23:48:02.019:E/AndroidRuntime(13723):在android.os.Handler.handleCallback(Handler.java:615)上
03-22 23:48:02.019:E/AndroidRuntime(13723):在android.os.Handler.dispatchMessage(Handler.java:92)上
03-22 23:48:02.019:E/AndroidRuntime(13723):在android.os.Looper.loop(Looper.java:137)
03-22 23:48:02.019:E/AndroidRuntime(13723):在android.app.ActivityThread.main(ActivityThread.java:4802)上
03-22 23:48:02.019:E/AndroidRuntime(13723):位于java.lang.reflect.Method.Invokenactive(本机方法)
03-22 23:48:02.019:E/AndroidRuntime(13723):位于java.lang.reflect.Method.invoke(Method.java:511)
03-22 23:48:02.019:E/AndroidRuntime(13723):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:813)
03-22 23:48:02.019:E/AndroidRuntime(13723):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:580)
03-22 23:48:02.019:E/AndroidRuntime(13723):在dalvik.system.NativeStart.main(本机方法)
我不确定是否有其他地方可能导致的信息,Logcat是Stacktrace吗


关于静态媒体播放器有一些问题,我尝试了不同的解决方案,但到目前为止没有任何效果,有人知道原因吗?

显然,您的
TimerClass
上的
playr
为空-可能您的
TimerClass
以前没有创建过,因此它并没有初始化,但在活动之间共享静态,特别是上下文或依赖于UI的元素,无论如何都不是一个好主意

您应该在需要的活动中创建MediaPlayer


编辑:注意到您正在
main活动中执行
new TimerClass()
——单独实例化活动也不是一个好主意。你应该经常使用
startActivity
,但实际上我认为你并不真的希望
TimerClass
成为一项活动。

请复制并粘贴你的日志,而不是图像。我已经编辑了日志,谢谢!谢谢你的建议。我想要实现的就是创建一个处理程序runnable,它每5秒播放一次声音,经过一周的多次尝试,这是我的最新成果。我需要能够从多个类开始和停止玩家。我对实现我最终目标的最佳方式感到困惑。它是空的,当然,一旦我知道如何初始化,我现在有点工作了,你就知道我的问题了!非常感谢。