Подкласс J-Monkey

Я новичок в 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.

person Xao Shen    schedule 09.11.2013    source источник
comment
Вы имеете в виду ошибку? У меня нет только неиспользуемого импорта и какой-то переменной?   -  person Robin Green    schedule 09.11.2013
comment
Нет, я не имею в виду ошибку компиляции. Я имею в виду трассировку стека исключений. Вы должны Google Что такое трассировка стека исключений?   -  person Xao Shen    schedule 09.11.2013
comment
хорошо, я редактирую пост и добавляю трассировку, хе-хе, я узнаю что-то новое, спасибо   -  person Robin Green    schedule 09.11.2013
comment
и какая строка является строкой 17 Logo.java?   -  person Xao Shen    schedule 09.11.2013
comment
этот: Spatial Logo_Model = assetsManager.loadModel(Models/Teapot/Logo.obj);   -  person Robin Green    schedule 09.11.2013
comment
так что вы говорите assentmanager, что я не могу объявлять переменную в logo.java или что я могу вставить код неправильным методом?   -  person Xao Shen    schedule 10.11.2013


Ответы (1)


Пожалуйста, опубликуйте трассировку стека исключений.

person Robin Green    schedule 10.11.2013
comment
Нет! Я говорю, что менеджер активов равен нулю. Сделайте так, чтобы он не был нулевым! Дайте ему значение! Вы понимаете, что означает ноль? - person Xao Shen; 11.11.2013
comment
Кстати, в C++ объявление переменной создает объект. В Java это не так. Если вы исходите из С++, это может быть источником вашей путаницы. - person Robin Green; 11.11.2013
comment
ха-ха, вы правы, я использую С++ и С#, поэтому я новичок в java xD, вы говорите мне, что это правда, что это было null, потому что logo.java никогда не запускается, поэтому он становится нулевым, поэтому я поставил logo.start(); и это работает, но оно сбрасывает настройки моих камер с flyCam, и снова открывается отладка, так что это будет сложно xD - person Robin Green; 11.11.2013
comment
Полная трассировка стека исключений: 9 ноября 2013 г., 11:29:32 java.util.prefs.WindowsPreferences ПРЕДУПРЕЖДЕНИЕ. Не удалось открыть/создать корневой узел prefs Software\JavaSoft\Prefs в корневом каталоге 0x80000002. Windows RegCreateKeyEx(...) вернул код ошибки 5. 09 ноября 2013 г. 11:29:49 com.jme3.system.JmeDesktopSystem инициализировать INFO: Running on jMonkeyEngine 3.0.0 Beta 09 ноября 2013 г. 11:29:49 com .jme3.system.Natives extractNativeLibs INFO: Каталог извлечения: C:\Users\Zero\Documents\Basic_Test_menu 09 ноября 2013 г. 11:29:49 com.jme3.system.lwjgl.LwjglDisplay createContext INFO: выбранный режим отображения: 800 x 600 x 0 @0Hz 09 ноября 2013 г. 11:29:50 com.jme3.system.lwjgl. LwjglContext printContextInitInfo INFO: Адаптер: igdumd64 09 ноября 2013 г. 11:29:50 com.jme3.system.lwjgl.LwjglContext printContextInitInfo INFO: Версия драйвера: null 09 ноября 2013 г. 11:29:50 com.jme3.system.lwjgl .LwjglContext printContextInitInfo INFO: Поставщик: Intel 09 ноября 2013 г. 11:29:50 com.jme3.system.lwjgl.LwjglContext printContextInitInfo INFO: Версия OpenGL: 3.1.0 — сборка 9.17. 10.2932 09 ноября 2013 г. 11:29:50 com.jme3.system.lwjgl.LwjglContext printContextInitInfo INFO: Renderer: Intel(R) HD Graphics 09 ноября 2013 г. 11:29:50 com.jme3.system.lwjgl.LwjglContext printContextInitInfo INFO: GLSL Ver: 1.40 — Intel Build 9.17.10.2932 9 ноября 2013 г. 11:29:50 com.jme3.system.lwjgl.LwjglTimer INFO: Разрешение таймера: 1000 тиков в секунду AM com.jme3.renderer.lwjgl.LwjglRenderer инициализирует INFO: Caps: [FrameBuffer, FrameBufferMRT, FrameBufferMultisample, OpenGL20, OpenGL21, OpenGL30, OpenGL31, ARBprogram, GLSL100, GLSL110, GLSL120, GLSL130, GLSL140, VertexTextureFetch, TextureArray FloatDepthBuffer, PackedFloatTexture, SharedExponentTexture, PackedFloatColorBuffer, NonPowerOfTwoTextures, MeshInstancing, VertexBufferArray, Multisample, PackedDepthStencilBuffer] 09 ноября 2013 г., 11:29:50 lender.BlenderModelLoader 09 ноября 2013 г. 11:29:50 com.jme3.asset.DesktopAssetManager INFO: DesktopAssetManager создан. 09 ноября 2013 г., 11:29:50 com.jme3.renderer.Camera INFO: Camera created (W: 800, H: 600) 09 ноября 2013 г., 11:29:50 com.jme3.renderer.Camera INFO: Camera создано (Ш: 800, В: 600) 9 ноября 2013 г., 11:29:50 com.jme3.input.lwjgl. LwjglMouseInput инициализирует INFO: Мышь создана. 09 ноября 2013 г. 11:29:50 com.jme3.input.lwjgl.LwjglKeyInput инициализировать INFO: Клавиатура создана. 09 ноября 2013 г. 11:29:51 com.jme3.audio.lwjgl.LwjglAudioRenderer initInThread INFO: AudioRenderer поддерживает 64 канала версия расширения: 1.0 09 ноября 2013 г. 11:29:51 com.jme3.audio.lwjgl.LwjglAudioRenderer initInThread INFO: максимальное количество дополнительных аудиопосылок: 4 09 ноября 2013 г. 11:29:51 com.jme3.material.MaterialDef INFO : Определение загруженного материала: Unshaded 09 ноября 2013 г. 11:29:51 com.jme3.scene.Node attachChild INFO: Дочерний элемент (BitmapFont), прикрепленный к этому узлу (null) 09 ноября 2013 г. 11:29:51 - person Xao Shen; 11.11.2013