title: (Java) Getting error with 2D Game
body: <p>I'm having an issue with my 2D game that I am following a tutorial for.  I've scanned my code several times and cannot seem to resolve it.  Sorry if my question sounds stupid, but I do welcome any help whatsoever.
  Here's my source:</p>
  
  <pre><code>package game;
  
  
  import gfx.SpriteSheet;
  
  import java.awt.BorderLayout;
  import java.awt.Canvas;
  import java.awt.Color;
  import java.awt.Dimension;
  import java.awt.Graphics;
  import java.awt.image.BufferStrategy;
  import java.awt.image.BufferedImage;
  import java.awt.image.DataBufferInt;
  
  import javax.swing.JFrame;
  
  public class Game extends Canvas implements Runnable
  {
      private static final long serialVersionUD = 1L;
  
      public static final int WIDTH = 160;
      public static final int HEIGHT = WIDTH/12*9;
      public static final int SCALE = 3;
      public static final String NAME = "Game";
  
      private JFrame frame;
  
      public boolean running = false;
      public int tickCount = 0;
  
      private BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
      private int[] pixels = ((DataBufferInt) image.getRaster().getDataBuffer()).getData();
  
      private SpriteSheet spriteSheet = new SpriteSheet("SpriteSheet.png");
  
      public Game()
      {
          setMinimumSize(new Dimension(WIDTH * SCALE, HEIGHT * SCALE));
          setMaximumSize(new Dimension(WIDTH * SCALE, HEIGHT * SCALE));
          setPreferredSize(new Dimension(WIDTH * SCALE, HEIGHT * SCALE));
          frame = new JFrame(NAME);
  
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          frame.setLayout(new BorderLayout());
          frame.add(this, BorderLayout.CENTER);
          frame.pack();
  
          frame.setResizable(false);
          frame.setLocationRelativeTo(null);
          frame.setVisible(true);
      }
      private synchronized void start()
      {
          running = true;
          new Thread(this).start();
      }
      private synchronized void stop()
      {
          running = false;
      }
  
      public void run() 
      {
          long lastTime = System.nanoTime();
          double nsPerTick = 1000000000D / 60D;
  
          int ticks = 0;
          int frames = 0;
  
          long lastTimer = System.currentTimeMillis();
          double delta = 0;
              while(running)
              {
                  long now = System.nanoTime();
                  delta += (now - lastTime) / nsPerTick;
                  lastTime = now;
                  boolean shouldRender = false;
  
  
                  while(delta &gt;= 1)
                  {
                      ticks++;
                  tick();
                  delta -= 1;
                  shouldRender = true;
                  }
  
  
              try {
                  Thread.sleep(2);
              } catch (InterruptedException ex) {
  
              }
  
                  if(shouldRender)
                  {
                  frames++;
                  render();
                  }
  
                 if(System.currentTimeMillis() - lastTimer &gt;= 1000)
                 {
                      lastTimer += 1000;
                      System.out.println(frames + ", " + ticks);
                      frames = 0;
                      ticks = 0;
                 }
  
              }
      }
      //Updates all of internal variables and logic and stuff.
      public void tick()
      {
          tickCount++;
  
          for(int i = 0; i &lt; pixels.length; i++)
          {
              pixels [i] = i + tickCount;
          }
      }
      //prints the updated logic.
      public void render()
      {
          BufferStrategy bs = getBufferStrategy();
          if(bs == null)
          {
              createBufferStrategy(3);
              return;
          }
          Graphics g = bs.getDrawGraphics();
          g.setColor(Color.BLACK);
          g.fillRect(0, 0, getWidth(), getHeight());
  
          g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
  
          g.dispose();
          bs.show();
  
      }
  
      //Main method
      public static void main(String[]args)
      {
          new Game().start();
      }
  
  
  
    }
  </code></pre>
  
  <hr>
  
  <pre><code>package gfx;
  
  import java.awt.image.BufferedImage;
  import java.io.IOException;
  
  import javax.imageio.ImageIO;
  
  public class SpriteSheet
  {
      public String path;
      public int width;
      public int height;
      public int[] pixels;
  
      public SpriteSheet(String path)
      {
          BufferedImage image = null;
  
          try 
          {
              image = ImageIO.read(SpriteSheet.class.getResourceAsStream(path));
          } catch (IOException e)
          {
              e.printStackTrace();
          }
  
          if(image == null)
          {
              return;
          }
  
          this.path = path;
          this.width = image.getWidth();
          this.height = image.getHeight();
  
          pixels = image.getRGB(0, 0, width, height, null, 0, width);
  
          for(int i = 0; i &lt; pixels.length; i++)
          {
              pixels[i] = (pixels[i] &amp; 0xff / 64);
          }
  
          for(int i = 0; i &lt; 8; i++)
          {
              System.out.println(pixels[i]);
          }
      }
  
  
    }
  </code></pre>
  
  <hr>
  
  <p>And here's a link to my video tutorial I'm using:  <a href="https://www.youtube.com/watch?v=o7pfq0W3e4I" rel="nofollow">Tutorial</a></p>
  
  <p>I'm using eclipse on a 64 bit operating system(Windows).
  Again, any help would be greatly appreciated, and thank you.</p>
  
  <p>EDIT: 
  Error message:</p>
  
  <pre><code>Exception in thread "main" java.lang.IllegalArgumentException: input == null!
      at javax.imageio.ImageIO.read(ImageIO.java:1348)
      at gfx.SpriteSheet.&lt;init&gt;(SpriteSheet.java:21)
      at game.Game.&lt;init&gt;(Game.java:34)
      at game.Game.main(Game.java:144)
  </code></pre>
  
  <p>Sorry, forgot error message. XD</p>