我的Null Pointer异常包含以下代码:

void videoCaptureLoop() {
    if (!isRecording) {
        if (videoCaptureThread != null){
            videoCaptureThread.interrupt();
            videoCaptureThread = null;
        }
        return;
    }

    //Start Video Capture Thread
    if (videoCaptureThread==null){
        videoCaptureThread = new VideoCaptureLooperThread();
        videoCaptureThread.start();
    }

    //Post capture video on 30 fps interval <<<<--------------NULL POINTER ON NEXT LINE
    videoCaptureThread.mHandler.postDelayed(runVideoCaptureLoop, (long) 33.3333333333);
}

Runnable runVideoCaptureLoop = new Runnable(){
    @Override
    public void run() {
        videoCaptureLoop();
    }
};

public class VideoCaptureLooperThread extends Thread{
    public Handler mHandler;
    public void run() {
        Looper.prepare();
        mHandler = new Handler();
        Looper.loop();
    }
}


我一直在线上得到一个空指针异常:

 videoCaptureThread.mHandler.postDelayed(runVideoCaptureLoop, (long) 33.3333333333);


麻烦的是,我不确定是否为null,我在其中插入了一个断点,但一切看起来都很好,直到崩溃为止,而且在崩溃前我无法在断点处看到任何不同的东西。

我的VideoCaptureLooperThread类看起来正确吗?它与mHandler是否需要静态有关吗?

错误

09-28 15:50:32.773: E/AndroidRuntime(24931): FATAL EXCEPTION: main
09-28 15:50:32.773: E/AndroidRuntime(24931): java.lang.NullPointerException
09-28 15:50:32.773: E/AndroidRuntime(24931):    at com.harmonicprocesses.penelopefree.camera.Pcamera.videoCaptureLoop(Pcamera.java:380)
09-28 15:50:32.773: E/AndroidRuntime(24931):    at com.harmonicprocesses.penelopefree.camera.Pcamera$2.onClick(Pcamera.java:338)
09-28 15:50:32.773: E/AndroidRuntime(24931):    at android.view.View.performClick(View.java:4240)


谢谢,

最佳答案

mHandler提供了nullpointer。 mHandler似乎仅在VideoCaptureLooperThread中声明。
在videoCaptureLoop之外的videoCaptureLoop()中,您引用的是mHandler。

09-25 21:04