title: Java Singleton NullPointerException
body: <p>I'm building my first game in Java, from scratch. I've decided that the GameWorld class, that centralizes the main operations of the game (handling input, etc), would be best implemented as a singleton (using an enum). The relevant code for the enum is below.</p>
  
  <pre><code>public enum GameWorld {
      INSTANCE;
      private static InputController input = InputController.getInput();
      public EntityPlayer player = new EntityPlayer(10, 10, 5, 5);
  
      public static GameWorld getWorld() {
          return INSTANCE;
      }
  
      public InputController getInputController() {
          return input;
      }
  }
  </code></pre>
  
  <p>The exception occurs in the constructor of EntityPlayer. The code and stack trace are below.</p>
  
  <pre><code>public class EntityPlayer implements Entity, InputListener {
      private int xPos;
      private int yPos;
      private int width;
      private int height;
  
      // Velocity of object
      // Determines where it sets itself on update
      private int xVel;
      private int yVel;
      private GameWorld world;
  
      private InputController input;
  
      private boolean solid;
  
      public EntityPlayer(int x, int y, int width, int height) {
          xPos = x;
          yPos = y;
          this.width = width;
          this.height = height;
          solid = true;
          xVel = 0;
          yVel = 0;
          world = getWorld();
          input = world.getInputController();
          input.registerKeyListener(this);
      }
  
      @Override
      public Graphics draw(Graphics g) {
          g.setColor(Color.yellow);
          g.fillRect(xPos, yPos - height, width, height);
          return g;
      }
  
      @Override
      public void update() {
          throw new UnsupportedOperationException("Not supported yet.");
      }
  
      @Override
      public int getXPos() {
          return xPos;
      }
  
      @Override
      public int getYPos() {
          return yPos;
      }
  
      @Override
      public Rectangle getRect() {
          throw new UnsupportedOperationException("Not supported yet.");
      }
  
      @Override
      public boolean isSolid() {
          return solid;
      }
  
      @Override
      public void kill() {
  
      }
  
      @Override
      public GameWorld getWorld() {
          return GameWorld.getWorld();
      }
  
      @Override
      public void sendKeyPress(KeyEvent ke) {
          System.out.println(ke.getKeyChar());
      }
  
      @Override
      public void sendMouseMove(MouseEvent me) {
  
      }
  
  }
  </code></pre>
  
  <p>The stack trace:</p>
  
  <pre><code>Exception in thread "main" java.lang.ExceptionInInitializerError
      at com.pvminecraft.gameworld.Main.&lt;clinit&gt;(Main.java:14)
  Caused by: java.lang.NullPointerException
  at com.pvminecraft.gameworld.entities.EntityPlayer.&lt;init&gt;(EntityPlayer.java:45)
  at com.pvminecraft.gameworld.GameWorld.&lt;init&gt;(GameWorld.java:15)
  at com.pvminecraft.gameworld.GameWorld.&lt;clinit&gt;(GameWorld.java:13)
  ... 1 more
  </code></pre>
  
  <p>Line 14 of Main.java is me getting another instance of GameWorld for testing. I'm not sure why this is throwing an Exception. If I remove references to GameWorld in EntityPlayer, it goes away. If you need the code for Main.java, tell me in the comments and I will post it. 
  Thanks!</p>
  
  <p><strong>EDIT:</strong>
  Line 45 in EntityPlayer is "input = world.getInputController();" I'm pretty sure that world is null, though I have no idea why.</p>