Java NullPointerException不会消失

Java NullPointerException不会消失,java,nullpointerexception,jmonkeyengine,Java,Nullpointerexception,Jmonkeyengine,对于熟悉jMonkey引擎的人,我有以下代码: @Override public void simpleUpdate(float tpf) { if (load) { if (frameCount == 1) { Element element = nifty.getScreen("loadlevel").findElementByName("loadingtext"); textRe

对于熟悉jMonkey引擎的人,我有以下代码:

@Override
    public void simpleUpdate(float tpf) {
        if (load) {
            if (frameCount == 1) {
                Element element = nifty.getScreen("loadlevel").findElementByName("loadingtext");
                textRenderer = element.getRenderer(TextRenderer.class);
                CubesTestAssets.registerBlocks();

                setProgress(0.2f, "Registering Blocks");
            } else if (frameCount == 2) {
                initBlockTerrain();

                setProgress(0.4f, "Generating Chunk");
            } else if (frameCount == 3) {
                initControls();
                initPlayer();

                setProgress(0.6f, "Setting Up Player");
            } else if (frameCount == 4) {
                viewPort.setBackgroundColor(ColorRGBA.Cyan);

                setProgress(0.8f, "Creating Sky");
            } else if (frameCount == 5) {
                inputManager.setCursorVisible(false);

                setProgress(1.0f, "Done");
            } else if (frameCount == 6) {
                nifty.gotoScreen("end");
                nifty.exit();
                guiViewPort.removeProcessor(niftyDisplay);
            }
            frameCount++;
        }

        float playerMoveSpeed = ((cubesSettings.getBlockSize() * 2.5f) * tpf);
        Vector3f camDir = cam.getDirection().mult(playerMoveSpeed);
        Vector3f camLeft = cam.getLeft().mult(playerMoveSpeed);
        walkDirection.set(0, 0, 0);
        if(arrowKeys[0]){ walkDirection.addLocal(camDir); }
        if(arrowKeys[1]){ walkDirection.addLocal(camLeft.negate()); }
        if(arrowKeys[2]){ walkDirection.addLocal(camDir.negate()); }
        if(arrowKeys[3]){ walkDirection.addLocal(camLeft); }
        walkDirection.setY(0);
        playerControl.setWalkDirection(walkDirection);
        cam.setLocation(playerControl.getPhysicsLocation());
    }
在我添加

float playerMoveSpeed = ((cubesSettings.getBlockSize() * 2.5f) * tpf);
        Vector3f camDir = cam.getDirection().mult(playerMoveSpeed);
        Vector3f camLeft = cam.getLeft().mult(playerMoveSpeed);
        walkDirection.set(0, 0, 0);
        if(arrowKeys[0]){ walkDirection.addLocal(camDir); }
        if(arrowKeys[1]){ walkDirection.addLocal(camLeft.negate()); }
        if(arrowKeys[2]){ walkDirection.addLocal(camDir.negate()); }
        if(arrowKeys[3]){ walkDirection.addLocal(camLeft); }
        walkDirection.setY(0);
        playerControl.setWalkDirection(walkDirection);
        cam.setLocation(playerControl.getPhysicsLocation());
部分。我添加的代码在另一个项目的另一个测试文件中工作,但现在它在这里停止工作。它必须在simpleUpdate()循环中,但我不明白它为什么会得到这个NullPointerException:

java.lang.NullPointerException
    at com.bminus.Main.simpleUpdate(Main.java:171)
    at com.jme3.app.SimpleApplication.update(SimpleApplication.java:242)
    at com.jme3.system.lwjgl.LwjglAbstractDisplay.runLoop(LwjglAbstractDisplay.java:151)
    at com.jme3.system.lwjgl.LwjglDisplay.runLoop(LwjglDisplay.java:185)
    at com.jme3.system.lwjgl.LwjglAbstractDisplay.run(LwjglAbstractDisplay.java:228)
    at java.lang.Thread.run(Thread.java:744)
如果有人知道为什么会这样,请帮助我!我唯一的解决方案是可能需要创建另一个类文件。提前谢谢

编辑:这是被称为null的行:

float playerMoveSpeed = ((cubesSettings.getBlockSize() * 2.5f) * tpf);
编辑2:这里是我初始化它的地方:

public class Main extends SimpleApplication implements ScreenController, Controller, ActionListener {

private static final Logger logger = Logger.getLogger(Main.class.getName());
private NiftyJmeDisplay niftyDisplay;
private Nifty nifty;
private Element progressBarElement;
private float frameCount = 0;
private boolean load = false;
private TextRenderer textRenderer;
private final Vector3Int terrainSize = new Vector3Int(100, 30, 100);
private BulletAppState bulletAppState;
private CharacterControl playerControl;
private Vector3f walkDirection = new Vector3f();
private boolean[] arrowKeys = new boolean[4];
private CubesSettings cubesSettings;
private BlockTerrainControl blockTerrain;
private Node terrainNode = new Node();
编辑3(如果还有人在这里):我已经通过

if (cubesSettings.getBlockSize() == null) {
    logger.log(Level.SEVERE, "null");
}

cubesSettings.getBlockSize()
是一个浮点数,
tpf
是一个浮点数。什么可以是空的

这不是一个真正的答案,而是当遇到空指针时应该做的事情

  • 您可以记录程序中发生的所有事情
  • 您只需执行
    System.out.println(variablename)
    从你给我们的情况来看,很难确切地说明原因。。您有空指针

    所以在这之前你能做的就是

    float playerMoveSpeed = ((cubesSettings.getBlockSize() * 2.5f) * tpf);
    
    简单地说

    System.out.println(cubeSettings.getBlockSize());
    System.out.println(tpf);
    

    并检入值为空的控制台;)

    我想出来了!我只需要再次使用update方法初始化
    cubesettings
    变量!nullPointerException消失了!我留下了一个新的更令人困惑的问题,但它与这个问题无关,是另一个问题的材料。谢谢大家!

    你得到了你需要的一切。。。查看:com.bminus.Main.simpleUpdate(Main.java:171)Main.java的第171行。。。您可以在那里找到什么?示例中Main.java的第171行在哪里?您似乎还年轻,欢迎来到progammer社区。在171行上放置一个断点,在debug中启动程序,并检查变量值。第171行中使用的变量中哪一个是空的?@Dan P@Jonathan Drapeau是的,我有点年轻(不是成年人),感谢大家欢迎我:P空似乎与浮点数在同一行,这使我觉得它所使用的变量上可能是空的。
    cubesSettings
    初始化在哪里?我没有看到任何代码初始化它,只是使用它。要么
    cubeSettings
    为null,要么
    cubeSettings.getBlockSize()
    为null(只有当它返回一个像
    Float
    (大写F)这样的包装原语时才能为null).
    tpf
    是一个基本值,不能为null。我猜
    cubesSettings
    为null。@mihi如果他在某个地方将tpf设置为null会怎么样?甚至不知道这一点?我们没有完整的代码tpf被声明为
    float
    (它是函数的一个参数),并且您不能将
    float
    之类的基元类型设置为
    null
    (因为
    null
    是一个不引用任何内容的引用,基元类型不是引用类型)尝试此操作。很抱歉,我有一段时间没有检查此项。我真的被其他事情缠住了。似乎是
    cubesSettings.getBlockSize();
    是返回null的内容。我将研究为什么返回null,因为cubesettings内容引用了我正在使用的框架。可能是我没有初始化它。