2013-03-14 59 views
-1

所以我的问题是,当我创建的状态被调用,我得到一个NullPointerException油污2D:渲染空指针异常

事情是,它不是nul升,至少我认为是这样。有人能告诉我NPE是从哪里来的吗?

PS:这是草率的代码,因为我没有清理它。

粗体行发生错误。

public class NewPlayerState extends BasicGameState { 

    private int stateID; 
    private boolean mouseDown; 
    private int mouseX; 
    private int mouseY; 
    private Random rand; 
    private String allTheStats; 

    private Image classPreview; 
    private Image genderSelector; 

    private Player player; 
    private Write write; 

    private String className = "paladin"; 
    private String name = "JamacanGuy"; 
    private int hitPoints = 0; 
    private int str = 0; 
    private int dex = 0; 
    private int sta = 0; 
    private int intel = 0; 
    private int cha = 0; 
    private boolean male = true; 

    private int hpMod = 0; 
    private int strMod = 0; 
    private int dexMod = 0; 
    private int staMod = 0; 
    private int intelMod = 0; 
    private int chaMod = 0; 

    private Input input; 

    public NewPlayerState(int stateID) { 
     this.stateID = stateID; 
    } 

    /* 
    * 
    * Initiation method, brings up relevant variables and get this Initializes them! 
    * 
    */ 

    @Override 
    public void init(GameContainer gc, StateBasedGame sbg) 
      throws SlickException { 
     // Ready the PARSER!!!! 
     rand = new Random(); 
     write = new Write(); 
     // init classPreview as paladin 
     classPreview = new Image("gfx/player/previews/paladin_male.png"); 
     // init gender icons 
     genderSelector = new Image("gfx/extra/new_player/gender_selector.png"); 
     allTheStats = "Hitpoints: " + hitPoints + " + HP Modifier: " + hpMod + " = " + (hitPoints + hpMod) + "\n" + 
         "Strength: " + str + " + STR Modifier: " + strMod + " = " + (str + strMod) + "\n" + 
         "Dexterity: " + dex + " + DEX Modifier: " + dexMod + " = " + (dex + dexMod) + "\n" + 
         "Stamina: " + sta + " + STA Modifier: " + staMod + " = " + (sta + staMod) + "\n" + 
         "Inteligence: " + intel + " + INT Modifier: " + intelMod + " = " + (intel + intelMod) + "\n" + 
         "Charisma: " + cha + " + CHA Modifier: " + chaMod + " = " + (cha + chaMod) + "\n" 
         ; 
    } 

    @Override 
    public void render(GameContainer gc, StateBasedGame sbg, Graphics g) 
      throws SlickException { 
     renderAll(g, sbg); 

    } 


    @Override 
    public void update(GameContainer gc, StateBasedGame sbg, int delta) 
      throws SlickException { 
     input = gc.getInput(); 

     mouseDown = input.isMouseButtonDown(0); 
     mouseX = input.getMouseX(); 
     mouseY = input.getMouseY(); 

     checkGender(); 
     updatePreview(); 
     updateStatModifier(); 
     updateStatDisplay(); 
    } 


    private void renderAll(Graphics g , StateBasedGame sbg) throws SlickException { 

     // draw background 
     g.setColor(Color.white); 
     g.fillRect(875, 455, 305, 405); 
     // draw background 

     // draw class preview 

     **classPreview.draw(880, 460, 300, 400);** // Error is here 

     // draw class preview 

     // Select your class 
     // Paladin 
     if (mouseOver(875, 410, 80, 40)) { 
      g.setColor(Color.darkGray); 
      if (mouseDown) { 
       className = "paladin"; 
      } 
     } else { 
      g.setColor(Color.blue); 
     } 
     g.fillRoundRect(875, 410, 80, 40, 5); 
     g.setColor(Color.white); 
     g.drawString("Paladin", 885, 420); 
     // Paladin 

     // Select your class 

     // Select Gender 
     genderSelector.draw(875, 300, 220, 100); 
     // Select Gender 

     // Roll for your stats 
      // Roll button 
       if(!mouseOver(100, 200, 100, 50)){ 
        g.setColor(Color.white); 
       }else if(mouseOver(100, 200, 100, 50)){ 
        g.setColor(Color.darkGray); 
        if(mouseDown){ 
         rollForStats(); 
        } 
       } 
        g.fillRoundRect(100, 200, 100, 50, 10); 
        g.setColor(Color.black); 
        g.drawString("Roll", 130, 215); 
      // Roll button 

      // Display stats 
        //Ugghhghghghghhghghghghgh!!!!!! 
        g.setColor(Color.white); 
        g.drawString(allTheStats, 80, 26); 
      // Display stats 

     // Roll for your stats 

     // exit and write to file, then open new level 
       if(!mouseOver(100, 600, 100, 50)){ 
        g.setColor(Color.white); 
       }else if(mouseOver(100, 600, 100, 50)){ 
        g.setColor(Color.darkGray); 
        if(mouseDown){ 
         closeUp(sbg); 
        } 
       } 
       g.fillRoundRect(100, 600, 100, 50, 10); 

       g.setColor(Color.black); 
       g.drawString("Play!", 130, 615); 
     // exit and write to file, then open new level 


    } 

    private void closeUp(StateBasedGame sbg) throws SlickException { 

     //set all that data 
     player = new Player(); 

     player.setClassName(className); 
     player.setName(name); 
     player.setHealth(hitPoints); 
     player.setStr(str); 
     player.setDex(dex); 
     player.setSta(sta); 
     player.setCha(cha); 
     player.setIntel(intel); 
     player.setStaMod(staMod); 
     player.setChaMod(chaMod); 
     player.setDexMod(dexMod); 
     player.setStrMod(strMod); 
     player.setIntelMod(intelMod); 
     player.setGender(male); 

     //save to xml 
     XStream xstream = new XStream(new StaxDriver()); 
     String xml = xstream.toXML(player); 

     write.writeToFile(xml, "save"); 

     // begin game 
     //Main.ps.setFirstLoad(true); 
     sbg.enterState(Main.PLAYSTATE, new FadeOutTransition(), new FadeInTransition()); 

     // prevent multiple clicks 
     mouseDown = false; 
    } 

    private void rollForStats(){ 
     hitPoints = rand.nextInt(20) + 1; 
     str = rand.nextInt(20) + 1; 
     dex = rand.nextInt(20) + 1; 
     sta = rand.nextInt(20) + 1; 
     intel = rand.nextInt(20) + 1; 
     cha = rand.nextInt(20) + 1; 
    } 

    private boolean mouseOver(int x, int y, int width, int height) { 
     if (mouseX > x && mouseX < x + width && mouseY > y 
       && mouseY < y + height) { 
      return true; 
     } else { 
      return false; 
     } 
    } 

    private void updateStatDisplay() { 
     allTheStats = "Hitpoints: " + hitPoints + " + HP Modifier: " + hpMod + " = " + (hitPoints + hpMod) + "\n" + 
        "Strength: " + str + " + STR Modifier: " + strMod + " = " + (str + strMod) + "\n" + 
        "Dexterity: " + dex + " + DEX Modifier: " + dexMod + " = " + (dex + dexMod) + "\n" + 
        "Stamina: " + sta + " + STA Modifier: " + staMod + " = " + (sta + staMod) + "\n" + 
        "Inteligence: " + intel + " + INT Modifier: " + intelMod + " = " + (intel + intelMod) + "\n" + 
        "Charisma: " + cha + " + CHA Modifier: " + chaMod + " = " + (cha + chaMod) + "\n" 
        ; 
    } 

    private void updatePreview() throws SlickException { 
     switch(className){ 
     case "paladin": 
      if(male){ 
       classPreview = new Image("gfx/player/previews/paladin_male.png"); 
      }else { 
       classPreview = new Image("gfx/player/previews/paladin_female.png"); 
      } 
      break; 
     default: 
       classPreview = new Image("gfx/player/previews/paladin_male.png"); 
      break; 
     } 

    } 

    private void checkGender() throws SlickException { 
     if (!mouseOver(875, 300, 220, 100)) { 
      genderSelector = new Image(
        "gfx/extra/new_player/gender_selector.png"); 
     } else if (mouseOver(875, 300, 220, 100)) { 
      if (mouseX > 985) { 
       genderSelector = new Image(
         "gfx/extra/new_player/male_selected.png"); 
       if (mouseDown) { 
        male = true; 
       } 
      } else { 
       genderSelector = new Image(
         "gfx/extra/new_player/female_selected.png"); 
       if (mouseDown) { 
        male = false; 
       } 
      } 
     } 

    } 

    public void updateStatModifier() { 
     switch (className) { 
     case "paladin": 
      if(male){ 
       hpMod = 6; 
       strMod = 6; 
       dexMod = 2; 
       staMod = 4; 
       intelMod = 5; 
       chaMod = 3; 
      }else{ 
       hpMod = 6; 
       strMod = 3; 
       dexMod = 2; 
       staMod = 4; 
       intelMod = 5; 
       chaMod = 5; 
      } 
      break; 
     } 
    } 

    @Override 
    public int getID() { 
     return stateID; 
    } 
} 
+0

莫非你大刀下你的代码给我们适用的部分? – syb0rg 2013-03-14 22:06:14

+0

'在粗线处调用错误'我没有看到粗线。还包括NPE的堆栈跟踪。 – Smit 2013-03-14 22:07:09

+0

我甚至找不到粗线!你可以发布堆栈跟踪的一部分,并删除任何不必要的代码,以便我们甚至可以解决你的问题。 – GuessBurger 2013-03-14 22:07:39

回答