Terrain nullpointer exception in JME3 code

I’m getting a nullpointer exception in the JME3 code when I’m running any Terrain code. Even in the unmodified HelloTerrain.java example code. The LOD calculation just suddenly freezes after a seemingly random amount of time, and only if I’ve moved around quite a bit. The rest of the game keeps running normally. This is the error I’m getting:

java.util.concurrent.ExecutionException: java.lang.NullPointerException
at java.util.concurrent.FutureTask.report(Unknown Source)
at java.util.concurrent.FutureTask.get(Unknown Source)
at com.jme3.terrain.geomipmap.TerrainLodControl.updateQuadLODs(TerrainLodControl.java:253)
at com.jme3.terrain.geomipmap.TerrainLodControl.updateLOD(TerrainLodControl.java:191)
at com.jme3.terrain.geomipmap.TerrainLodControl.controlUpdate(TerrainLodControl.java:170)
at com.jme3.scene.control.AbstractControl.update(AbstractControl.java:128)
at com.jme3.scene.Spatial.runControlUpdate(Spatial.java:736)
at com.jme3.scene.Spatial.updateLogicalState(Spatial.java:879)
at com.jme3.scene.Node.updateLogicalState(Node.java:230)
at com.jme3.scene.Node.updateLogicalState(Node.java:241)
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:193)
at com.jme3.system.lwjgl.LwjglAbstractDisplay.run(LwjglAbstractDisplay.java:232)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
at com.jme3.math.Vector3f.distanceSquared(Vector3f.java:450)
at com.jme3.math.Vector3f.distance(Vector3f.java:464)
at com.jme3.terrain.geomipmap.lodcalc.DistanceLodCalculator.calculateLod(DistanceLodCalculator.java:68)
at com.jme3.terrain.geomipmap.TerrainQuad.calculateLod(TerrainQuad.java:365)
at com.jme3.terrain.geomipmap.TerrainQuad.calculateLod(TerrainQuad.java:361)
at com.jme3.terrain.geomipmap.TerrainQuad.calculateLod(TerrainQuad.java:361)
at com.jme3.terrain.geomipmap.TerrainQuad.calculateLod(TerrainQuad.java:361)
at com.jme3.terrain.geomipmap.TerrainQuad.calculateLod(TerrainQuad.java:361)
at com.jme3.terrain.geomipmap.TerrainQuad.calculateLod(TerrainQuad.java:361)
at com.jme3.terrain.geomipmap.TerrainLodControl$UpdateLOD.call(TerrainLodControl.java:416)
at com.jme3.terrain.geomipmap.TerrainLodControl$UpdateLOD.call(TerrainLodControl.java:396)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
… 1 more

Is this a bug in the jMonkeyEngine, the tutorial or am I doing something wrong?

This might be something else. Check how many threads are runninf, or even instances of your game. If i remember, the lod generator created a thread for each lod control. The work around is use a threadpool and use .setexecutor() on the lod control to set the lod control to use your threadpool instead of creating its own badly handled thread creation.

1 Like