Initialize an Image

11,577

Solution 1

Your image is indeed initialised with the statement

wall = ImageIO.read(new File("C:/eclipse/projects/Pong/wall.png"));

However, the compiler is complaining because that statement could possibly fail, as it is in a try/catch block. A possible way to just "satisfy" the compiler is to set the Image variable to null:

Image wall = null;

Solution 2

You are initializing the Image correctly. The reason Java is complaining is you have it in a try block. Try blocks are not guaranteed to run and you don't compensate for the possibility of the code failing in the catch block, so it you (and more importantly, Java) can't be sure that wall will exist when you call window.drawImage(). A possible fix would be (cutting out the imports but with a bit of code for reference):

public class Wall extends Block
{
/**
 * Constructs a Wall with position and dimensions
 * @param x the x position
 * @param y the y position
 * @param wdt the width
 * @param hgt the height
 */
public Wall(int x, int y, int wdt, int hgt)
    {super(x, y, wdt, hgt);}

/**
  * Draws the wall
  * @param window the graphics object
  */
 public void draw(Graphics window)
 {
    Image wall;

    try 
        {wall = ImageIO.read(new File("C:/eclipse/projects/Pong/wall.png"));}
    catch (IOException e)
    {
        e.printStackTrace();
        wall = new BufferedWindow(getWidth(), getHeight(), <Correct Image Type>);
    }

    window.drawImage(wall, getX(), getY(), getWidth(), getHeight(), null);
  }
}

Solution 3

Always initialization of the variable declared to class is important

Image wall = null;

Share:
11,577

Related videos on Youtube

LazerWing
Author by

LazerWing

Updated on October 06, 2022

Comments

  • LazerWing
    LazerWing over 1 year

    I'm trying to make top and bottom walls for my Pong game. I think I have everything right but it will not run because it says "The local variable wall may not have been initialized". How do I initialize an Image?

    import java.awt.Graphics;
    import java.awt.Image;
    import java.io.File;
    import java.io.IOException;
    import javax.imageio.ImageIO;
    
    public class Wall extends Block
    {
    /**
     * Constructs a Wall with position and dimensions
     * @param x the x position
     * @param y the y position
     * @param wdt the width
     * @param hgt the height
     */
    public Wall(int x, int y, int wdt, int hgt)
        {super(x, y, wdt, hgt);}
    
    /**
      * Draws the wall
      * @param window the graphics object
      */
     public void draw(Graphics window)
     {
        Image wall;
    
        try 
            {wall = ImageIO.read(new File("C:/eclipse/projects/Pong/wall.png"));}
        catch (IOException e)
            {e.printStackTrace();}
    
        window.drawImage(wall, getX(), getY(), getWidth(), getHeight(), null);
      }
    }
    

    Thanks to everyone who answered I've figured it out. I didn't realize I just needed to set wall = null.