【问题标题】:Need help with Android NullPointer problem需要有关 Android NullPointer 问题的帮助
【发布时间】:2011-07-02 10:43:33
【问题描述】:

我目前正在制作游戏,但遇到了这个烦人的问题。试图谷歌它,但到目前为止没有运气。我在自己的文件中定义了一个类(这里的代码不是我的游戏,而是一个具有相同错误的简化代码):

package graf.grafika;

public class MyClass {
    int number;
}

问题出在 myMethod(应用程序意外停止):

public class aktivnost extends Activity {
    MyClass[] myclass = new MyClass[5];

    void myMethod()
    {
        //Error
        myclass[0].number = 1;
    }

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        myMethod();
        setContentView(new Panel(this));
    }
...other required methods
}

Logcat:

07-02 10:01:13.507: ERROR/AndroidRuntime(3203): FATAL EXCEPTION: main
07-02 10:01:13.507: ERROR/AndroidRuntime(3203): java.lang.RuntimeException: Unable to start activity ComponentInfo{graf.grafika/graf.grafika.aktivnost}: java.lang.NullPointerException
07-02 10:01:13.507: ERROR/AndroidRuntime(3203):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1736)
07-02 10:01:13.507: ERROR/AndroidRuntime(3203):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1752)
07-02 10:01:13.507: ERROR/AndroidRuntime(3203):     at android.app.ActivityThread.access$1500(ActivityThread.java:123)
07-02 10:01:13.507: ERROR/AndroidRuntime(3203):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:993)
07-02 10:01:13.507: ERROR/AndroidRuntime(3203):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-02 10:01:13.507: ERROR/AndroidRuntime(3203):     at android.os.Looper.loop(Looper.java:126)
07-02 10:01:13.507: ERROR/AndroidRuntime(3203):     at android.app.ActivityThread.main(ActivityThread.java:3997)
07-02 10:01:13.507: ERROR/AndroidRuntime(3203):     at java.lang.reflect.Method.invokeNative(Native Method)
07-02 10:01:13.507: ERROR/AndroidRuntime(3203):     at java.lang.reflect.Method.invoke(Method.java:491)
07-02 10:01:13.507: ERROR/AndroidRuntime(3203):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
07-02 10:01:13.507: ERROR/AndroidRuntime(3203):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
07-02 10:01:13.507: ERROR/AndroidRuntime(3203):     at dalvik.system.NativeStart.main(Native Method)
07-02 10:01:13.507: ERROR/AndroidRuntime(3203): Caused by: java.lang.NullPointerException
07-02 10:01:13.507: ERROR/AndroidRuntime(3203):     at graf.grafika.aktivnost.myMethod(aktivnost.java:17)
07-02 10:01:13.507: ERROR/AndroidRuntime(3203):     at graf.grafika.aktivnost.onCreate(aktivnost.java:23)
07-02 10:01:13.507: ERROR/AndroidRuntime(3203):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
07-02 10:01:13.507: ERROR/AndroidRuntime(3203):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1700)
07-02 10:01:13.507: ERROR/AndroidRuntime(3203):     ... 11 more

谁能帮我解决这个问题?顺便说一句,我对 java 编程很陌生。

【问题讨论】:

    标签: java android class methods nullpointerexception


    【解决方案1】:

    要在数组中实际添加 5 个新类:

    MyClass[] myclass = new MyClass[5];
    for(int i = 0; i < 5; i++)
    {
    myclass[i] = new MyClass();
    }
    

    【讨论】:

      【解决方案2】:

      myclass[0] 为空,因为它不指向任何对象。这就是为什么你得到一个空指针。你应该这样做myclass[0] = new MyClass();

      public class aktivnost extends Activity {
          MyClass[] myclass = new MyClass[5];
      
          void myMethod()
          {
              //Error
              myclass[0] = new MyClass(); 
              myclass[0].number = 1;
          }
      
          public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              requestWindowFeature(Window.FEATURE_NO_TITLE);
              myMethod();
              setContentView(new Panel(this));
          }
      ...other required methods
      }
      

      【讨论】:

      • 我似乎无法使语法正常工作...我正在使用 Eclipse。您能否在评论中以正确的方式重写 aktivnost 类?我知道这听起来很愚蠢,但我对 java 很陌生。
      • oww 非常感谢你 :) 我一直把那行放在第一个声明的下面。我猜是 C++ 的影响。
      【解决方案3】:

      MyClass[] myclass= new MyClass[5]; 意味着您初始化数组对象,而不是单个对象,您应该初始化要在数组对象中使用它们的单个对象,例如 myclass[0] = new MyClass();

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-04-06
        • 2018-04-26
        • 2014-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多