Я новичок в java и J-monkey, и я пытаюсь создать java-игру, поэтому для меню я сделал перечисление, чтобы я мог переключаться между любым из моих состояний, но я хочу, чтобы основной файл был короче, чтобы он мог быть легко читаемым, поэтому я создаю подкласс, проблема в том, что при запуске игры она дает мне ошибку, которая говорит: «Неперехваченное исключение, созданное в Thread [LWJGL Renderer Thread, 5, main] NullPointerException». Я думаю, что эта проблема должна быть чем-то с конвейером Вот код моего основного файла:
package mygame;
import com.jme3.app.SimpleApplication;
import com.jme3.font.BitmapText;
import com.jme3.material.Material;
import com.jme3.math.ColorRGBA;
import com.jme3.math.Vector3f;
import com.jme3.renderer.RenderManager;
import com.jme3.scene.Spatial;
import com.jme3.scene.Geometry;
import com.jme3.input.*;
import com.jme3.input.controls.*;
public class Main extends SimpleApplication {
//GameStates
enum GameState{Logo, Menu, Playing, Option};
GameState gameState = GameState.Logo;
//Class Variables
Logo logo;
public Main() {
logo = new Logo();
}
public static void main(String[] args) {
Main app = new Main();
app.start();
}
public static void logo(String[] args) {
Logo app = new Logo();
app.start();
}
@Override
public void simpleInitApp() {
//Load
flyCam.setMoveSpeed(20);
if(gameState == GameState.Logo){
logo.simpleInitApp();
}
}
@Override
public void simpleUpdate(float tpf) {
}
@Override
public void simpleRender(RenderManager rm) {
//TODO: add render code
//Load
if(gameState == GameState.Logo)
{
}
}
}
И вот мой подкласс Logo:
package mygame;
import com.jme3.app.SimpleApplication;
import com.jme3.renderer.RenderManager;
import com.jme3.scene.Spatial;
public class Logo extends SimpleApplication {
@Override
public void simpleInitApp() {
Spatial Logo_Model = assetManager.loadModel("Models/Teapot/Logo.obj");
rootNode.attachChild(Logo_Model);
}
public void simpleRender(RenderManager rm) {
//Load
}
}
Я переместил вниз трассировку стека, которая, по моему мнению, вызывает мою проблему, поэтому вам не нужно читать все исключения, просто прокрутите вниз
Проблема в том, что
package mygame;
import com.jme3.app.SimpleApplication;
import com.jme3.font.BitmapText;
import com.jme3.material.Material;
import com.jme3.math.ColorRGBA;
import com.jme3.math.Vector3f;
import com.jme3.renderer.RenderManager;
import com.jme3.scene.Spatial;
import com.jme3.scene.Geometry;
import com.jme3.input.*;
import com.jme3.input.controls.*;
public class Main extends SimpleApplication {
//GameStates
enum GameState{Logo, Menu, Playing, Option};
GameState gameState = GameState.Logo;
//Class Variables
Logo logo;
public Main() {
logo = new Logo();
}
public static void main(String[] args) {
Main app = new Main();
app.start();
}
public static void logo(String[] args) {
Logo app = new Logo();
app.start();
}
@Override
public void simpleInitApp() {
//Load
flyCam.setMoveSpeed(20);
if(gameState == GameState.Logo){
logo.simpleInitApp();
}
}
@Override
public void simpleUpdate(float tpf) {
}
@Override
public void simpleRender(RenderManager rm) {
//TODO: add render code
//Load
if(gameState == GameState.Logo)
{
}
}
}
на данный момент равно нулю. Либо вы присваиваете его слишком поздно, либо вообще забываете присваивать. AM com.jme3.app.Application handleError SEVERE: Uncaught exception
thrown in Thread[LWJGL Renderer Thread,5,main]
java.lang.NullPointerException
at mygame.Logo.simpleInitApp(Logo.java:17)
at mygame.Main.simpleInitApp(Main.java:46)
at com.jme3.app.SimpleApplication.initialize(SimpleApplication.java:225)
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:722)
Nov 09, 2013 11:29:51 AM com.jme3.renderer.lwjgl.LwjglRenderer cleanup
INFO: Deleting objects and invalidating state
Nov 09, 2013 11:29:51 AM com.jme3.input.lwjgl.LwjglMouseInput destroy
INFO: Mouse destroyed.
Nov 09, 2013 11:29:51 AM com.jme3.input.lwjgl.LwjglKeyInput destroy
INFO: Keyboard destroyed.
Nov 09, 2013 11:29:51 AM com.jme3.system.lwjgl.LwjglAbstractDisplay deinitInThread
INFO: Display destroyed.