-1

嗨,我的代码有一个“奇怪”的问题,这就是日志所说的:

06-15 17:06:38.054: E/AndroidRuntime(5699): FATAL EXCEPTION: main
06-15 17:06:38.054: E/AndroidRuntime(5699): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.ball_anim/com.example.ball_anim.Main}: java.lang.NullPointerException
06-15 17:06:38.054: E/AndroidRuntime(5699):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
06-15 17:06:38.054: E/AndroidRuntime(5699):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
06-15 17:06:38.054: E/AndroidRuntime(5699):     at android.app.ActivityThread.access$600(ActivityThread.java:130)
06-15 17:06:38.054: E/AndroidRuntime(5699):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
06-15 17:06:38.054: E/AndroidRuntime(5699):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-15 17:06:38.054: E/AndroidRuntime(5699):     at android.os.Looper.loop(Looper.java:137)
06-15 17:06:38.054: E/AndroidRuntime(5699):     at android.app.ActivityThread.main(ActivityThread.java:4745)
06-15 17:06:38.054: E/AndroidRuntime(5699):     at java.lang.reflect.Method.invokeNative(Native Method)
06-15 17:06:38.054: E/AndroidRuntime(5699):     at java.lang.reflect.Method.invoke(Method.java:511)
06-15 17:06:38.054: E/AndroidRuntime(5699):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
06-15 17:06:38.054: E/AndroidRuntime(5699):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
06-15 17:06:38.054: E/AndroidRuntime(5699):     at dalvik.system.NativeStart.main(Native Method)
06-15 17:06:38.054: E/AndroidRuntime(5699): Caused by: java.lang.NullPointerException
06-15 17:06:38.054: E/AndroidRuntime(5699):     at com.example.ball_anim.Main$MyView.<init>(Main.java:86)
06-15 17:06:38.054: E/AndroidRuntime(5699):     at com.example.ball_anim.Main.onCreate(Main.java:48)
06-15 17:06:38.054: E/AndroidRuntime(5699):     at android.app.Activity.performCreate(Activity.java:5008)
06-15 17:06:38.054: E/AndroidRuntime(5699):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
06-15 17:06:38.054: E/AndroidRuntime(5699):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
06-15 17:06:38.054: E/AndroidRuntime(5699):     ... 11 more

在 Main 类中调用类自定义方法 GameTime 时出现错误。这是我的类 GameTime.java

public class GameTime extends CountDownTimer{
    public long Tempo_Trascorso;
    private final long startTime = 10000;
    private boolean End=false;
    private long Tempo_Stop;

        public GameTime(long startTime, long interval){
            super(startTime, interval);
                }
                @Override
                public void onFinish(){
                  System.out.println("Finish!");
                  End = true;

                }

                @Override
                public void onTick(long millisUntilFinished){
                    System.out.println("Time Restante:" + millisUntilFinished);
                    Tempo_Trascorso = startTime - millisUntilFinished;
                    if(End == false){
                    Tempo_Stop=millisUntilFinished;
                     }
                    }
                //Custom method #1 get the time when the game thread is stopped
                public long getLastTime(){ 
                    return Tempo_Stop;
                }
                //Custom method #2 get the true/false when the time is end
                public boolean getEndGame(){
                    return End;
                }


}

主.java

public class Main extends Activity {
private Bitmap Player_bmp,Player_bmp_StateLV1,Player_bmp_StateLV2,Player_bmp_StateLV3,Life_bmp,Lose_bmp;
private SurfaceHolder holder;
private AnimationThread AnimThread;
private GameTime GameTime;
private DialogBox Dbox;
private Random rnd;
private int Display_width,Display_height;
private int RandomPosx;
private int Rosso,Verde,Blu;
private Paint paint,paint_L;
private float deltaX,deltaY;
private boolean Drag = false,Collision = false,Stop = false;
private int Static_PositionX,Static_PositionY;
private List<Sfere> C_Sfere = new ArrayList<Sfere>();
private int Life,LostLife=0;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(new MyView(this));


    }
public class MyView extends SurfaceView {

        public MyView(Context context) {
            super(context);
// More code(too long)

}

编辑:这是创建surfaceview和游戏东西时main和myview类的OnCreate,不要放置所有代码,因为它太长了,如果需要更多信息告诉我;)

在主类的任何地方,调用应用程序 GameTime 给我的自定义方法。我想澄清在专用于对话框的类中主类给我错误的地方(例如)没有错误错误

4

2 回答 2

2

编写NullPointerException程序时最常见的错误之一是 a 。希望这是最容易修复的错误之一。

什么时候NullPointerException抛出?

当应用程序在需要对象的情况下尝试使用 null 时引发。这些包括:

  • 调用空对象的实例方法。
  • 访问或修改空对象的字段。
  • 将 null 的长度视为一个数组。
  • 访问或修改 null 的槽,就像它是一个数组一样。
  • 把 null 当作一个 Throwable 值来抛出。
  • 应用程序应抛出此类的实例以指示空对象的其他非法使用。

既然您已经阅读了抛出它时可能出现的情况,请学习阅读来自 logcat 的消息,它们通常会提供丰富的信息。在您的情况下,要阅读的重要信息来自以下Caused By行:

06-15 17:06:38.054: E/AndroidRuntime(5699): Caused by: java.lang.NullPointerException
06-15 17:06:38.054: E/AndroidRuntime(5699):     at com.example.ball_anim.Main$MyView.<init>(Main.java:86)
06-15 17:06:38.054: E/AndroidRuntime(5699):     at com.example.ball_anim.Main.onCreate(Main.java:48)
06-15 17:06:38.054: E/AndroidRuntime(5699):     at android.app.Activity.performCreate(Activity.java:5008)

如果您仔细观察,您会发现错误是在Main.java文件的第 86 行抛出的(即at com.example.ball_anim.Main$MyView.<init>(Main.java:86))。

所以看看这条线,看看可能是什么null。在您的情况下,您声明了变量GameTime,但忘记初始化它,因此当您尝试对其调用方法getLastTime()时,NPE会抛出 a 。

于 2013-06-15T15:53:28.587 回答
0

在日志中,您可以看到异常发生在

06-15 17:06:38.054: E/AndroidRuntime(5699): Caused by: java.lang.NullPointerException
06-15 17:06:38.054: E/AndroidRuntime(5699):     at com.example.ball_anim.Main$MyView.<init>(Main.java:86)

因此,您需要检查MyView文件中第 86 行的构造函数Main.java

您没有发布其代码,因此我们无法为您提供更多帮助。

于 2013-06-15T15:32:30.793 回答