簡體   English   中英

診斷“ RuntimeException:無法啟動活動,原因是:java.lang.NullPointerException”

[英]Diagnose a “RuntimeException: Unable to start activity Caused by: java.lang.NullPointerException”

我不知道要去哪里,我在這里關注一個android教程,在最新更新時,我遇到了運行時錯誤,而且我真的很難找到它的來源!

我的目標是在屏幕上向左傾斜的地方出現一個小的“球形”圖標,玩家可以在表面上拖放。

自從我上次成功編譯該程序以來,現在我僅對該程序進行了一些更改。 所有這些都在GameView類中,您可以在此處查看: http : //pastebin.com/zsYKFmuP 我還創建了一個名為Orb的全新類,它在這里: http : //pastebin.com/wQKqcVtV

如果您有使用android開發的經驗,那么查看我的代碼應該不會太麻煩,但是我感謝任何花時間提出建議的人! 所有建議將不勝感激!

logcat的意思是:

 FATAL EXCEPTION: main
 java.lang.RuntimeException: Unable to start activity ComponentInfo{biz.hireholly.tutorial/biz.hireholly.tutorial.MainActivity}: java.lang.NullPointerException
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1659)
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1675)
     at android.app.ActivityThread.access$1500(ActivityThread.java:121)
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:943)
     at android.os.Handler.dispatchMessage(Handler.java:99)
     at android.os.Looper.loop(Looper.java:130)
     at android.app.ActivityThread.main(ActivityThread.java:3701)
     at java.lang.reflect.Method.invokeNative(Native Method)
     at java.lang.reflect.Method.invoke(Method.java:507)
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)
     at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.NullPointerException
     at biz.hireholly.tutorial.models.Orb.<init>(Orb.java:13)
     at biz.hireholly.tutorial.GameView.<init>(GameView.java:34)
     at biz.hireholly.tutorial.MainActivity.onCreate(MainActivity.java:25)
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1623)
     ... 11 more

Orb類的相關來源:

public class Orb {

        private Bitmap bitmap;  //image
        private int x;  //x coord
        private int y;  //y coord
        private boolean touched; //if orb is touched/picked up
        //just to make things simpler to read
        int halfBmpX = bitmap.getWidth() /2; // <<<=== Line 13
        int halfBmpY = bitmap.getHeight() /2;

您的Orb類嘗試從null引用中初始化halfBmpX (和Y )。

該初始化應該您具有一個有效的Bitmap進行初始化之后在構造函數中進行。

public Orb(Bitmap bmp, int x, int y) {
    this.bitmap = bmp;
    this.x = x;
    this.y = y;
    halfBmpX = bmp.getWidth() / 2;
    halfBmpY = bmp.getHeight() / 2;
}

說明:類的開頭的那些初始化在構造函數運行之前運行,因此bitmap除了null引用外不存在。

您嘗試在分配位圖之前在其上調用方法,但該方法仍然為null

int halfBmpX = bitmap.getWidth() /2;

您應該在構造函數中移動以下兩行:

halfBmpX = bitmap.getWidth() /2;
halfBmpY = bitmap.getHeight() /2;

並將它們的聲明保留在構造函數之外:

int halfBmpX, halfBmpY;

您的Orb類中具有以下代碼:

private Bitmap bitmap;  //image
private int x;  //x coord
private int y;  //y coord
private boolean touched; //if orb is touched/picked up
//just to make things simpler to read
int halfBmpX = bitmap.getWidth() /2;
int halfBmpY = bitmap.getHeight() /2;

您已經對bitmap對象進行了兩次引用,而沒有對其進行初始化。 您應該在構造函數中設置halfBmpXhalfBmpY

在Orb課程的Line 13 & 14 ,您可以執行此操作

int halfBmpX = bitmap.getWidth() /2;
int halfBmpY = bitmap.getHeight() /2;

bitmap尚未初始化且為null時,因此為Null Pointer Exception。

向右移動bitmap.getWidth() /2; bitmap初始化后,構造函數中的bitmap

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM