为什么这段代码会产生异常?

时间:2013-08-30 14:28:32

标签: android camera

我是Android开发的初学者,我正在尝试制作相机应用程序。 我把所有的代码都放在了pastebin中;这是链接:

Main.java: here

CameraControl.java:here

CameraPreview.java:here

代码有点乱,但我希望你能读懂它。

以下是来自logcat的异常消息:

08-30 17:31:48.299: E/AndroidRuntime(2558): FATAL EXCEPTION: main
08-30 17:31:48.299: E/AndroidRuntime(2558): java.lang.NullPointerException
08-30 17:31:48.299: E/AndroidRuntime(2558):     at com.maccer.vidcamtest.Main$1.onClick(Main.java:25)
08-30 17:31:48.299: E/AndroidRuntime(2558):     at android.view.View.performClick(View.java:2485)
08-30 17:31:48.299: E/AndroidRuntime(2558):     at android.view.View$PerformClick.run(View.java:9080)
08-30 17:31:48.299: E/AndroidRuntime(2558):     at android.os.Handler.handleCallback(Handler.java:587)
08-30 17:31:48.299: E/AndroidRuntime(2558):     at android.os.Handler.dispatchMessage(Handler.java:92)
08-30 17:31:48.299: E/AndroidRuntime(2558):     at android.os.Looper.loop(Looper.java:130)
08-30 17:31:48.299: E/AndroidRuntime(2558):     at android.app.ActivityThread.main(ActivityThread.java:3687)
08-30 17:31:48.299: E/AndroidRuntime(2558):     at java.lang.reflect.Method.invokeNative(Native Method)
08-30 17:31:48.299: E/AndroidRuntime(2558):     at java.lang.reflect.Method.invoke(Method.java:507)
08-30 17:31:48.299: E/AndroidRuntime(2558):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878)
08-30 17:31:48.299: E/AndroidRuntime(2558):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636)
08-30 17:31:48.299: E/AndroidRuntime(2558):     at dalvik.system.NativeStart.main(Native Method)

2 个答案:

答案 0 :(得分:1)

在您的Main中,您有一个字段:

    private CameraControl cc;

从未初始化;因此,当您尝试在回调中使用它时,它为null。也就是说,试着打电话

cc.safeCameraOpen()

cc为null时会导致NullPointerException。

答案 1 :(得分:1)

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

final Button button = (Button) findViewById(R.id.button1);

button.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        cc.safeCameraOpen(); //<<--------------------------------------
    }
});

}

您永远不会为cc设置任何值,因此它为空并且您获得NPE。