[英]java.lang.RuntimeException: Unable to start activity ComponentInfo{…}: 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
對象進行了兩次引用,而沒有對其進行初始化。 您應該在構造函數中設置halfBmpX
和halfBmpY
。
在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.