诊断a";RuntimeException:无法启动活动,原因是:java.lang.NullPointerException“;
我不知道该怎么办,我正在学习一个android教程,在最新的更新中,我遇到了一个运行时错误,我真的很难找到它的来源 我的目标是在屏幕左下角出现一个小的“球体”图标,玩家可以在屏幕上拖放 自从上次成功编译以来,我只对程序做了一些更改。所有这些都在GameView类中,您可以在此处看到:。我还创建了一个名为Orb的全新类,在这里: 如果你有android开发经验,那么查看我的代码应该不会太麻烦,但是我感谢任何花时间提出建议的人!所有建议将不胜感激 logcat这样说:诊断a";RuntimeException:无法启动活动,原因是:java.lang.NullPointerException“;,java,android,runtime,nullpointerexception,Java,Android,Runtime,Nullpointerexception,我不知道该怎么办,我正在学习一个android教程,在最新的更新中,我遇到了一个运行时错误,我真的很难找到它的来源 我的目标是在屏幕左下角出现一个小的“球体”图标,玩家可以在屏幕上拖放 自从上次成功编译以来,我只对程序做了一些更改。所有这些都在GameView类中,您可以在此处看到:。我还创建了一个名为Orb的全新类,在这里: 如果你有android开发经验,那么查看我的代码应该不会太麻烦,但是我感谢任何花时间提出建议的人!所有建议将不胜感激 logcat这样说: FATAL EXCEPTIO
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
类尝试从null
引用初始化halfBmpX
(和Y
)
该初始化应在拥有有效的位图
进行初始化后在构造函数中进行
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;
}
说明:类开头的那些初始化是在构造函数运行之前运行的,因此
位图
除了null
引用之外不存在任何其他形式。您的Orb
类尝试从null
引用初始化halfBmpX
(和Y
)
该初始化应在拥有有效的位图
进行初始化后在构造函数中进行
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;
并将其声明保存在建造商之外:
halfBmpX = bitmap.getWidth() /2;
halfBmpY = bitmap.getHeight() /2;
int halfBmpX, halfBmpY;
您尝试在分配位图之前对其调用一个方法,但该方法仍然是
null
:
int halfBmpX = bitmap.getWidth() /2;
您应该在构造函数中移动以下两行:
halfBmpX = bitmap.getWidth() /2;
halfBmpY = bitmap.getHeight() /2;
int halfBmpX, halfBmpY;
并将其声明保存在建造商之外:
halfBmpX = bitmap.getWidth() /2;
halfBmpY = bitmap.getHeight() /2;
int halfBmpX, halfBmpY;
您的
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;
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;
您已经对
位图
对象进行了两次引用,但没有对其进行初始化。您应该改为在构造函数中设置halfBmpX
和halfBmpY
。您的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;
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;
您已经对
位图
对象进行了两次引用,但没有对其进行初始化。您应该在构造函数中设置halfBmpX
和halfBmpY
。在您的Orb类的第13行和第14行中,您可以这样做
int halfBmpX = bitmap.getWidth() /2;
int halfBmpY = bitmap.getHeight() /2;
当位图
尚未初始化且为空时,则会出现空指针异常
向右移动bitmap.getWidth()/2在初始化位图之后,构造函数中的code>位。在Orb类的第13行和第14行中执行此操作
int halfBmpX = bitmap.getWidth() /2;
int halfBmpY = bitmap.getHeight() /2;
当位图
尚未初始化且为空时,则会出现空指针异常
向右移动bitmap.getWidth()/2在初始化位图之后,构造函数中的code>位。不是int
部分,否则它们将是本地的。@DᴀᴠᴇNᴇᴡᴛᴏɴ-是的,复制粘贴错误。谢谢不是int
部分,否则它们将是本地的。@DᴀᴠᴇNᴇᴡᴛᴏɴ-是的,复制粘贴错误。谢谢啊!这样愚蠢的错误!我得到了许多正确的回答,我感谢大家的关注@霍莉:它发生了:)不过,在未来,最好提供有问题的源代码,以避免不得不挖掘它——我们相当懒惰。DOH!这样愚蠢的错误!我得到了许多正确的回答,我感谢大家的关注@霍莉:)不过,在未来,最好提供有问题的源代码,以避免需要挖掘——我们相当懒惰。