1

Это мой код для загрузки узла с моделью, а затем прикрепление элемента управления анимацией. Я получаю исключение NullPointerException, потому что он говорит, что мой AnimControl имеет значение null.Jmonkey NullPointerException

Мой класс управления аним в моделях/stickman.blend/Арматура/куб

Node model = (Node)assetManager.loadModel("Models/stickman.j3o"); 
control = model.getControl(AnimControl.class); 
control.addListener(this); 
channel = control.createChannel(); 
channel.setAnim("jump"); 
model.scale(0.25f); 
model.addControl(physicsCharacter); 
getPhysicsSpace().add(physicsCharacter); 
rootNode.attachChild(model); 

Как избавиться от этого NullPointerException или переместить класс AnimControl вверх из поддиректории, поэтому он не будет быть нулевым? Благодарю.

java.lang.NullPointerException 
at mygame.Main.simpleInitApp(Main.java:96) 
at com.jme3.app.SimpleApplication.initialize(SimpleApplication.java:226) 
at com.jme3.system.lwjgl.LwjglAbstractDisplay.initInThread(LwjglAbstractDisplay.java:130) 
at com.jme3.system.lwjgl.LwjglAbstractDisplay.run(LwjglAbstractDisplay.java:207) 
at java.lang.Thread.run(Thread.java:744) 

enter image description here

+1

Опубликуйте полную стекцию NPE. – m0skit0

+0

Помогает ли это редактировать? –

+1

Какая строка Main.java:96? – m0skit0

ответ

1

NullPointerException говорит вам так ясно, как это может, что переменная control равна нулю. Это, в свою очередь, означает, что model.getControl(AnimControl.class); вернул null. javadoc tells you it will do this, если нет контроля над типом AnimControl.class

Я думаю, глядя на the tutorial, вы должны прикрепить свой узел к корневому узлу. От this page

У каждого приложения JME3 есть rootNode: ваша игра автоматически наследует объект rootNode из SimpleApplication.

Таким образом, до тех пор, как ваш класс extends SimpleApplication вам просто нужно добавить

rootNode.attachChild(model); 

сразу после

Node model = (Node)assetManager.loadModel("Models/stickman.j3o"); 

кажется, что это вложение будет автоматически связать модель с контролем - в продемонстрированный в этом фрагменте от animation beginners tutorial

player = (Node) assetManager.loadModel("Models/Oto/Oto.mesh.xml"); 
player.setLocalScale(0.5f); 
rootNode.attachChild(player); 
control = player.getControl(AnimControl.class);