开始主要活动时应用崩溃

扎克

当我启动主要活动时,我的应用程序由于崩溃了NullPointerException

如何解决此错误?

Logcat:

java.lang.NullPointerException
    at com.zackercracker.todthealien.GamePanel.surfaceCreated(GamePanel.java:63)
    at android.view.SurfaceView.updateWindow(SurfaceView.java:569)
    at android.view.SurfaceView.access$000(SurfaceView.java:86)
    at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:174)
    at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:680)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1842)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
    at android.view.Choreographer.doCallbacks(Choreographer.java:562)
    at android.view.Choreographer.doFrame(Choreographer.java:532)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
    at android.os.Handler.handleCallback(Handler.java:725)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:5041)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
    at dalvik.system.NativeStart.main(Native Method)

我的主要活动课:

import android.content.Context;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.support.annotation.NonNull;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

import java.util.ArrayList;
import java.util.Random;


public class GamePanel extends SurfaceView implements SurfaceHolder.Callback {
public static final int WIDTH = 960;
public static final int HEIGHT = 540;
public static final int MoveSpeed = -3;
private long enemyStartTime;
public MainThread thread;
private Background bg;
private Alien alien;
private ArrayList<Enemy> enemy;
private Random rand = new Random();

public GamePanel(Context context) {
    super(context);

    getHolder().addCallback(this);

    setFocusable(true);
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int wight, int height) {
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {

    boolean retry = true;
    while (retry) {
        try {
            thread.setRunning(false);
            thread.join();
            retry = false;
            thread = null;

        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

@Override
public void surfaceCreated(SurfaceHolder holder) {

    bg = new Background(BitmapFactory.decodeResource(getResources(), R.drawable.backgrounda));

    enemy = new ArrayList<>();
    long EnemyElapsed = (System.nanoTime() - enemyStartTime) / 1000000;
    if (EnemyElapsed > (2000 - alien.getScore() / 4)) {
        switch ((int) (rand.nextDouble() * 5)) {
            case 0:
                enemy.add(new Enemy(BitmapFactory.decodeResource(getResources(), R.drawable.dog), WIDTH + 10, 60, 250, 250, alien.getScore(), 2));
                enemyStartTime = System.nanoTime();
                break;
            case 1:
                enemy.add(new Enemy(BitmapFactory.decodeResource(getResources(), R.drawable.hyd), WIDTH + 10, 60, 480, 270, alien.getScore(), 2));
                enemyStartTime = System.nanoTime();
                break;
            case 2:
                enemy.add(new Enemy(BitmapFactory.decodeResource(getResources(), R.drawable.hobo), WIDTH + 10, 60, 580, 370, alien.getScore(), 1));
                enemyStartTime = System.nanoTime();
                break;
            case 3:
                enemy.add(new Enemy(BitmapFactory.decodeResource(getResources(), R.drawable.hole), WIDTH + 10, 60, 580, 370, alien.getScore(), 1));
                enemyStartTime = System.nanoTime();
                break;
            case 4:
                enemy.add(new Enemy(BitmapFactory.decodeResource(getResources(), R.drawable.baby), WIDTH + 10, 60, 580, 370, alien.getScore(), 1));
                enemyStartTime = System.nanoTime();
                break;
            case 5:
                enemy.add(new Enemy(BitmapFactory.decodeResource(getResources(), R.drawable.lightpaul), WIDTH + 10, 45, 580, 370, alien.getScore(), 1));
                enemyStartTime = System.nanoTime();
                break;
        }
    }

    for (int i = 0; i < enemy.size(); i++) {
        enemy.get(i).update();
        if (collision(enemy.get(i), alien)) ;
        {
            enemy.remove(i);
            break;
        }
    }


    thread = new MainThread(getHolder(), this);
    thread.setRunning(true);
    thread.start();
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    return super.onTouchEvent(event);
}

public void update() {
    bg.update();
    alien.update();
    for (Enemy m : enemy) {
        m.update();
    }
}

public boolean collision(GameObject a, GameObject b) {
    return Rect.intersects(a.getRectangel(), b.getRectangel());
}

public void draw(@NonNull Canvas canvas) {
    final float scaleFactoryX;
    scaleFactoryX = getWidth() / (WIDTH * 1.f);
    final float scaleFactoryY;
    scaleFactoryY = getHeight() / (HEIGHT * 1.f);
    final int savedState = canvas.save();
    canvas.scale(scaleFactoryX, scaleFactoryY);
    bg.draw(canvas);
    alien.draw(canvas);
    for (Enemy m : enemy) {
        m.draw(canvas);
    }
    canvas.restoreToCount(savedState);

}

我的游戏小组课程:

import android.content.Context;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.support.annotation.NonNull;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

import java.util.ArrayList;
import java.util.Random;


public class GamePanel extends SurfaceView implements SurfaceHolder.Callback {
public static final int WIDTH = 960;
public static final int HEIGHT = 540;
public static final int MoveSpeed = -3;
private long enemyStartTime;
public MainThread thread;
private Background bg;
private Alien alien;
private ArrayList<Enemy> enemy;
private Random rand = new Random();

public GamePanel(Context context) {
    super(context);

    getHolder().addCallback(this);

    setFocusable(true);
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int wight, int height) {
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {

    boolean retry = true;
    while (retry) {
        try {
            thread.setRunning(false);
            thread.join();
            retry = false;
            thread = null;

        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

@Override
public void surfaceCreated(SurfaceHolder holder) {

    bg = new Background(BitmapFactory.decodeResource(getResources(), R.drawable.backgrounda));

    enemy = new ArrayList<>();
    long EnemyElapsed = (System.nanoTime() - enemyStartTime) / 1000000;
    if (EnemyElapsed > (2000 - alien.getScore() / 4)) {
        switch ((int) (rand.nextDouble() * 5)) {
            case 0:
                enemy.add(new Enemy(BitmapFactory.decodeResource(getResources(), R.drawable.dog), WIDTH + 10, 60, 250, 250, alien.getScore(), 2));
                enemyStartTime = System.nanoTime();
                break;
            case 1:
                enemy.add(new Enemy(BitmapFactory.decodeResource(getResources(), R.drawable.hyd), WIDTH + 10, 60, 480, 270, alien.getScore(), 2));
                enemyStartTime = System.nanoTime();
                break;
            case 2:
                enemy.add(new Enemy(BitmapFactory.decodeResource(getResources(), R.drawable.hobo), WIDTH + 10, 60, 580, 370, alien.getScore(), 1));
                enemyStartTime = System.nanoTime();
                break;
            case 3:
                enemy.add(new Enemy(BitmapFactory.decodeResource(getResources(), R.drawable.hole), WIDTH + 10, 60, 580, 370, alien.getScore(), 1));
                enemyStartTime = System.nanoTime();
                break;
            case 4:
                enemy.add(new Enemy(BitmapFactory.decodeResource(getResources(), R.drawable.baby), WIDTH + 10, 60, 580, 370, alien.getScore(), 1));
                enemyStartTime = System.nanoTime();
                break;
            case 5:
                enemy.add(new Enemy(BitmapFactory.decodeResource(getResources(), R.drawable.lightpaul), WIDTH + 10, 45, 580, 370, alien.getScore(), 1));
                enemyStartTime = System.nanoTime();
                break;
        }
    }

    for (int i = 0; i < enemy.size(); i++) {
        enemy.get(i).update();
        if (collision(enemy.get(i), alien)) ;
        {
            enemy.remove(i);
            break;
        }
    }


    thread = new MainThread(getHolder(), this);
    thread.setRunning(true);
    thread.start();
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    return super.onTouchEvent(event);
}

public void update() {
    bg.update();
    alien.update();
    for (Enemy m : enemy) {
        m.update();
    }
}

public boolean collision(GameObject a, GameObject b) {
    return Rect.intersects(a.getRectangel(), b.getRectangel());
}

public void draw(@NonNull Canvas canvas) {
    final float scaleFactoryX;
    scaleFactoryX = getWidth() / (WIDTH * 1.f);
    final float scaleFactoryY;
    scaleFactoryY = getHeight() / (HEIGHT * 1.f);
    final int savedState = canvas.save();
    canvas.scale(scaleFactoryX, scaleFactoryY);
    bg.draw(canvas);
    alien.draw(canvas);
    for (Enemy m : enemy) {
        m.draw(canvas);
    }
    canvas.restoreToCount(savedState);

}
维亚切斯拉夫

检查wheater,BitmapFactory.decodeResource returns null然后找到您的63岁。

问题是:error opening trace file: No such file or directory (2)com.zackercracker.todthealien.GamePanel.surfaceCreated(GamePanel.java:63它意味着你有空指针,而不是正常的值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

无法开始主要活动

从主要活动布局开始新的活动

当我打开游戏活动时,我的应用程序不断崩溃。我试图创建一个从主要活动打开的游戏活动

在应用程序图标上,单击“开始挂起的意图”,而不是主要活动

无法从主要活动中的onActivityResult方法开始新活动

我如何确保我的Android应用程序始终在主要活动上启动,即使它崩溃了?

为什么我的 onStart() 函数在我项目的主要活动开始时不起作用?

如何从非主要活动退出 Kotlin 应用程序

Android-扩展应用程序或运行主要活动

Android找不到应用程序的主要活动

以最终意图开始活动时应用程序崩溃

开始点击活动时Android应用崩溃

尝试开始新活动时应用崩溃

我的应用程序开始活动时崩溃

重返主要活动时如何再次播放音乐

面临主要活动的困难

不跳到主要活动

可信网络活动中的主要活动

android继承活动(基础-主要活动)

添加新活动代替主要活动

显示特定活动而不显示应用程序的主要活动

在没有可用应用源代码的情况下,如何获取启动主要活动时Android应用调用的方法的踪迹?

从初始活动移至主要活动时,意图产生空对象引用

当控件从Camera子活动返回时,主要活动被覆盖

从 Android 应用程序 A,如何在应用程序 B 中打开非主要活动?

开始某些活动时android程序崩溃

应用程序重新启动,从背景,而不是恢复以前的状态的主要活动

如何从主要活动中按退键退出应用程序?

启动器和主要活动(在Java Swing应用程序中)