J-Monkey子类

时间:2013-11-09 03:50:44

标签: java nullpointerexception jmonkeyengine

我是java和J-monkey的新手,我正在尝试制作一个java游戏,所以对于菜单我已经制作了一个枚举,所以我可以在我的任何状态之间切换,但我想保持主文件更短所以它可以很容易阅读所以我正在制作子类的问题是,当运行游戏时它给我一个错误,说“线程中抛出未捕获的异常[LWJGL渲染器线程,5,主要] 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

    }
    }

我已经向下移动堆栈跟踪,我认为这是我的问题所以你不必阅读所有Exception只是向下滚动

完整异常堆栈跟踪: 2013年11月9日上午11:29:32 java.util.prefs.WindowsPreferences 警告:无法在根0x80000002处打开/创建prefs根节点Software \ JavaSoft \ Prefs。 Windows RegCreateKeyEx(...)返回错误代码5。     2013年11月9日上午11:29:49 com.jme3.system.JmeDesktopSystem初始化    信息:在jMonkeyEngine 3.0.0 Beta上运行    2013年11月9日上午11:29:49 com.jme3.system.Natives extractNativeLibs    信息:提取目录:C:\ Users \ Zero \ Documents \ Basic_Test_menu    2013年11月9日上午11:29:49 com.jme3.system.lwjgl.LwjglAbstractDisplay run    信息:使用LWJGL 2.8.4    2013年11月9日上午11:29:49 com.jme3.system.lwjgl.LwjglDisplay createContext    信息:选择的显示模式:800 x 600 x 0 @ 0Hz    2013年11月9日上午11:29:50 com.jme3.system.lwjgl.LwjglContext printContextInitInfo    信息:适配器:igdumd64    2013年11月9日上午11:29:50 com.jme3.system.lwjgl.LwjglContext printContextInitInfo    信息:驱动程序版本:null    2013年11月9日上午11:29:50 com.jme3.system.lwjgl.LwjglContext printContextInitInfo    信息:供应商:英特尔    2013年11月9日上午11:29:50 com.jme3.system.lwjgl.LwjglContext printContextInitInfo    信息:OpenGL版本:3.1.0 - Build 9.17.10.2932    2013年11月9日上午11:29:50 com.jme3.system.lwjgl.LwjglContext printContextInitInfo    信息:渲染器:英特尔(R)高清显卡    2013年11月9日上午11:29:50 com.jme3.system.lwjgl.LwjglContext printContextInitInfo    信息:GLSL版本:1.40 - 英特尔Build 9.17.10.2932    2013年11月9日上午11:29:50 com.jme3.system.lwjgl.LwjglTimer    信息:定时器分辨率:每秒1,000个滴答    2013年11月9日上午11:29:50 com.jme3.renderer.lwjgl.LwjglRenderer初始化    INFO:上限:[帧缓冲,FrameBufferMRT,FrameBufferMultisample,OpenGL20,OpenGL21,OpenGL30,OpenGL31,ARBprogram,GLSL100,GLSL110,GLSL120,GLSL130,GLSL140,VertexTextureFetch,TextureArray,FloatTexture,FloatColorBuffer,FloatDepthBuffer,PackedFloatTexture,SharedExponentTexture,PackedFloatColorBuffer,NonPowerOfTwoTextures,MeshInstancing ,VertexBufferArray,Multisample,PackedDepthStencilBuffer]     2013年11月9日上午11:29:50 com.jme3.asset.AssetConfig loadText     警告:找不到加载程序com.jme3.scene.plugins.blender.BlenderModelLoader     2013年11月9日上午11:29:50 com.jme3.asset.DesktopAssetManager     信息:DesktopAssetManager已创建。     2013年11月9日上午11:29:50 com.jme3.renderer.Camera     信息:相机创建(W:800,H:600)     2013年11月9日上午11:29:50 com.jme3.renderer.Camera     信息:相机创建(W:800,H:600)     2013年11月9日上午11:29:50 com.jme3.input.lwjgl.LwjglMouseInput初始化     信息:鼠标已创建。     2013年11月9日上午11:29:50 com.jme3.input.lwjgl.LwjglKeyInput initialize     信息:键盘已创建。     2013年11月9日上午11:29:51 com.jme3.audio.lwjgl.LwjglAudioRenderer initInThread     信息:AudioRenderer支持64个频道     2013年11月9日上午11:29:51 com.jme3.audio.lwjgl.LwjglAudioRenderer initInThread     信息:音频效果扩展版本:1.0     2013年11月9日上午11:29:51 com.jme3.audio.lwjgl.LwjglAudioRenderer initInThread     信息:音频最大辅助发送:4     2013年11月9日上午11:29:51 com.jme3.material.MaterialDef     信息:加载的材料定义:无阴影     2013年11月9日上午11:29:51 com.jme3.scene.Node attachChild     信息:附加到此节点的子(BitmapFont)(null)     2013年11月9日11:29:51

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.

1 个答案:

答案 0 :(得分:1)

问题是assetManager在那个时间点为空。要么分配太晚,要么忘记分配它。