2015-01-10 2 views
-2

레이블과 텍스트 필드를 표시해야하는 매우 기본적인 프로그램이 있습니다. 텍스트를 표시 할 수 있습니다. 텍스트 필드, 나는 오류없이 만들 수 있지만 내가 무대에 추가하고 프로그램을 실행할 때이 오류가 :이해할 수없는 NullPointerException

Exception in thread "LWJGL Application" java.lang.NullPointerException 
at com.badlogic.gdx.scenes.scene2d.ui.TextField.draw(TextField.java:301) 
at com.badlogic.gdx.scenes.scene2d.Group.drawChildren(Group.java:111) 
at com.badlogic.gdx.scenes.scene2d.Group.draw(Group.java:58) 
at com.badlogic.gdx.scenes.scene2d.Stage.draw(Stage.java:128) 
at com.pace.converter.MainMenuScreen.render(MainMenuScreen.java:52) 
at com.badlogic.gdx.Game.render(Game.java:46) 
at com.pace.converter.MyGdxGame.render(MyGdxGame.java:21) 
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:207) 
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:114) 

내가 코드 블록에 줄 번호를 넣어하는 방법을 알고하지 않는 한을

MainMenuScreen.java : 내 의견에, 여기 줄은 오류로 지적된다 (52)가

stage.draw(); 

MyGdxGame.java : 21

super.render(); 
입니다

스테이지에 추가하기 전에 TextField를 만들 때 왜이 NullPointerException이 발생하는지 이해할 수 없습니다.

주요 활동 :

public class MyGdxGame extends Game { 
    SpriteBatch batch; 
    AssetManager assets; 

    @Override 
    public void create() { 
     batch = new SpriteBatch(); 
     assets = new AssetManager(); 

     this.setScreen(new LoadingScreen(this)); 
    } 

    @Override 
    public void render() { 
     super.render(); 
    } 

    public void dispose() { 
     batch.dispose(); 
    } 
} 

메인 메뉴 화면 : 그리고 여기 내 전체 코드입니다

public MainMenuScreen(final MyGdxGame gam) { 
    game = gam; 

    camera = new OrthographicCamera(); 
    camera.setToOrtho(false, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 

    skin = new Skin(Gdx.files.internal("skin.json")); 
    stage = new Stage(); 

    labelStyle = new LabelStyle(game.assets.get("font1.ttf", BitmapFont.class), Color.WHITE); 
    labelTest = new Label("Test", labelStyle); 
    textFieldTest = new TextField("Test", skin); 

    stage.addActor(labelTest); 
    stage.addActor(textFieldTest); 
} 

@Override 
public void render(float delta) { 
    Gdx.gl.glClearColor(0.281f, 0.602f, 0.844f, 0); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

    game.batch.setProjectionMatrix(camera.combined); 

    stage.act(); 
    stage.draw(); 
} 
+0

문제를 디버그하지 않거나 문제가되는 라이브러리 파일의 sourcejar 또는 디스 어셈블 된 코드를 가져 오지 않는 이유는 무엇입니까? 사용하고있는 libgdx의 버전을 알려주지 않으므로 줄 번호를 실제 코드와 연관시키는 것은 불가능합니다. – cfrick

답변

0

우선 당신이 null이 될 수있는 몇 가지를 확인해야 모든 .. 포장하여 try-catch 블록의 코드 stage이 무엇인지 모르겠지만 초기화 되었는 지 확인하십시오. stage 만약

null 은 다음 super.render();에 대한 같은 Main menu Screen

skin = new Skin(Gdx.files.internal("skin.json")); // is the skin null ? if the file 'skin.json' couldn't be found then this would be null.. check this 

textFieldTest = new TextField("Test", skin); // If skin is null, you're adding it here 

에서 확인되지 그것도 여기에 호출하도록되어?