0

我在我的代码中找不到空指针异常,我想知道是否有人可以帮助我找到导致错误的原因。代码:包com.dingle.ubat;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.PowerManager;
import android.view.Display;
import android.view.MotionEvent;
import android.widget.Toast;

public class UltraBrightAndroidTorchActivity extends Activity {
/** Called when the activity is first created. */
 PowerManager pm;
 PowerManager.WakeLock wl;
 public boolean flash = false;
 public boolean enableFlash = false;
 public boolean dimDisplay = false;
 Display display = getWindowManager().getDefaultDisplay(); 
 public int windowWidth = display.getWidth();
 public int windowHeight = display.getHeight();
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag");
    flash = this.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
    if(flash == true && enableFlash == true){
    try {
            DroidLED led = new DroidLED();
            led.enable(!led.isEnabled());
    }
    catch(Exception e) {
            Toast.makeText(this, "Error interacting with LED.", Toast.LENGTH_SHORT).show();
            throw new RuntimeException(e);
    }  }

    wl.acquire();

}

@Override
public boolean onTouchEvent(MotionEvent event) {
    //int tx = (int) event.getRawX();
    int ty = (int) event.getRawY();
    if (ty <= (windowHeight/2)){
        dimDisplay = !dimDisplay;
    }
    if (ty >= (windowHeight/2)){
        enableFlash = !enableFlash;
    }
    return super.onTouchEvent(event);
}

@Override
protected void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
    wl.release();
}

@Override
protected void onNewIntent(Intent intent) {
    // TODO Auto-generated method stub
    super.onNewIntent(intent);
    wl.release();
}

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

@Override
protected void onStop() {
    // TODO Auto-generated method stub
    super.onStop();
    wl.release();
}

}

错误列表:

    12-10 20:40:42.224: W/dalvikvm(274): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
12-10 20:40:42.232: E/AndroidRuntime(274): Uncaught handler: thread main exiting due to uncaught exception
12-10 20:40:42.282: E/AndroidRuntime(274): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.dingle.ubat/com.dingle.ubat.UltraBrightAndroidTorchActivity}: java.lang.NullPointerException
12-10 20:40:42.282: E/AndroidRuntime(274):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417)
12-10 20:40:42.282: E/AndroidRuntime(274):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
12-10 20:40:42.282: E/AndroidRuntime(274):  at android.app.ActivityThread.access$2200(ActivityThread.java:119)
12-10 20:40:42.282: E/AndroidRuntime(274):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
12-10 20:40:42.282: E/AndroidRuntime(274):  at android.os.Handler.dispatchMessage(Handler.java:99)
12-10 20:40:42.282: E/AndroidRuntime(274):  at android.os.Looper.loop(Looper.java:123)
12-10 20:40:42.282: E/AndroidRuntime(274):  at android.app.ActivityThread.main(ActivityThread.java:4363)
12-10 20:40:42.282: E/AndroidRuntime(274):  at java.lang.reflect.Method.invokeNative(Native Method)
12-10 20:40:42.282: E/AndroidRuntime(274):  at java.lang.reflect.Method.invoke(Method.java:521)
12-10 20:40:42.282: E/AndroidRuntime(274):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
12-10 20:40:42.282: E/AndroidRuntime(274):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
12-10 20:40:42.282: E/AndroidRuntime(274):  at dalvik.system.NativeStart.main(Native Method)
12-10 20:40:42.282: E/AndroidRuntime(274): Caused by: java.lang.NullPointerException
12-10 20:40:42.282: E/AndroidRuntime(274):  at com.dingle.ubat.UltraBrightAndroidTorchActivity.<init>(UltraBrightAndroidTorchActivity.java:20)
12-10 20:40:42.282: E/AndroidRuntime(274):  at java.lang.Class.newInstanceImpl(Native Method)
12-10 20:40:42.282: E/AndroidRuntime(274):  at java.lang.Class.newInstance(Class.java:1479)
12-10 20:40:42.282: E/AndroidRuntime(274):  at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
12-10 20:40:42.282: E/AndroidRuntime(274):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2409)
12-10 20:40:42.282: E/AndroidRuntime(274):  ... 11 more

非常感谢任何帮助和批评代码正在为 android 2.1 编译。code 是一个基本的、乱码的 Torch 应用程序。谢谢

4

2 回答 2

3

代码正在以下两行之一中进行救援:

Display display = getWindowManager().getDefaultDisplay(); 
public int windowWidth = display.getWidth();

要么getWindowManager()返回 anull并且第一个初始化程序将失败,要么返回 a 并且第二个初始化程序将失败getDefaultDisplay()

您可能应该将这些初始化移动到onCreate处理程序。在实例初始化时让它们听起来有点冒险——活动的“环境”可能还没有完全设置好。

(并检查返回值。)

于 2011-12-10T11:00:37.067 回答
0

活动只有在创建后才可用。此行没有达到预期目的:

 Display display = getWindowManager().getDefaultDisplay(); 

将此行和后续行移到onCreate方法内。

于 2011-12-10T11:03:00.610 回答