Java Libgdx NullPointerException

Java Libgdx NullPointerException,java,android,animation,libgdx,Java,Android,Animation,Libgdx,我正在尝试用libgdx制作一个简单的动画,里面有一张精灵纸,一个正在移动双腿的瘦小男人。代码如下: package com.pro.schoolrun; import com.badlogic.gdx.ApplicationListener; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.GL10; import com.badlogic.gdx.graphics.OrthographicCamera; impor

我正在尝试用libgdx制作一个简单的动画,里面有一张精灵纸,一个正在移动双腿的瘦小男人。代码如下:

package com.pro.schoolrun;

import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;

public class SchoolRun implements ApplicationListener {
    Texture player;
    TextureRegion[] regions;
    SpriteBatch batch;
    OrthographicCamera camera;
    int i;

    @Override
    public void create() {

        i = 0;

        player = new Texture(Gdx.files.internal("data/spritesheet.png"));
        regions[0] = new TextureRegion(player, 0, 0, player.getWidth() / 4,
                player.getHeight() / 2);
        regions[1] = new TextureRegion(player, 64, 0, player.getWidth() / 4,
                player.getHeight() / 2);
        regions[2] = new TextureRegion(player, 128, 0, player.getWidth() / 4,
                player.getHeight() / 2);
        regions[3] = new TextureRegion(player, 192, 0, player.getWidth() / 4,
                player.getHeight() / 2);
        regions[4] = new TextureRegion(player, 0, 128, player.getWidth() / 4,
                player.getHeight() / 2);
        regions[5] = new TextureRegion(player, 64, 128, player.getWidth() / 4,
                player.getHeight() / 2);
        regions[6] = new TextureRegion(player, 128, 128, player.getWidth() / 4,
                player.getHeight() / 2);
        regions[7] = new TextureRegion(player, 192, 128, player.getWidth() / 4,
                player.getHeight() / 2);

        camera = new OrthographicCamera();
        camera.setToOrtho(false, 800, 400);
        batch = new SpriteBatch();

    }

    @Override
    public void dispose() {
        player.dispose();
        batch.dispose();

    }

    @Override
    public void render() {

        Gdx.gl.glClearColor(0, 0, 0.2f, 1);
        Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

        camera.update();

        batch.setProjectionMatrix(camera.combined);

        while (true) {

            batch.begin();
            if (i > 7) {
                i = -1;
                i++;
            } else {
                i++;
            }

            batch.draw(regions[i], Gdx.graphics.getWidth() / 2,
                    Gdx.graphics.getHeight() / 2);
           batch.end();
        }

    }

    @Override
    public void resize(int width, int height) {
    }

    @Override
    public void pause() {
    }

    @Override
    public void resume() {
    }
}
但当我在android上运行它时,它在第24at行[0]处给了我一个空指针异常。这是MainActivity类:

package com.pro.schoolrun;

import android.os.Bundle;

import com.badlogic.gdx.backends.android.AndroidApplication;
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;

public class MainActivity extends AndroidApplication {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration();
        cfg.useGL20 = true;
        cfg.useAccelerometer=false;
        cfg.useCompass = false;


        initialize(new SchoolRun(), cfg);
    }
}
您从不初始化区域数组:

这应该是

TextureRegion[] regions = new TextureRegion[8];

这应该可以解决以下问题

空指针异常意味着您正在尝试使用尚未初始化的内容。对象、数组和变量在使用前必须初始化/赋值

在本例中,您尝试使用名为regions的TextureRegion数组,但尚未初始化。可以按如下方式初始化阵列:

region = new TextureRegion[8];
其中8是数组的大小。
在使用region之前必须调用此语句。

当图像文件为空时,会发生NullPointerException。这意味着在此目录中找不到图像文件

确保在正确的位置找到您的图像

在您的情况下,您的图像应位于

包含项目/SchoolRun/android/assets/data的目录

或者将代码更改为

        player = new Texture(Gdx.files.internal("spritesheet.png"));

希望你成功:

好,这就解决了问题!现在我必须找出为什么我的模拟器的屏幕是空白的!需要注意的一点是,在渲染方法中不需要while循环。它是自动调用的。我不同意。当找不到文件时,LibGdx抛出com.badlogic.gdx.utils.GdxRuntimeException。当您使用尚未初始化的内容时,将引发NullPointerException。
region = new TextureRegion[8];
        player = new Texture(Gdx.files.internal("spritesheet.png"));