初始化图像

时间:2014-02-15 02:55:30

标签: java image initialization

我正试图为我的Pong游戏制作顶部和底部墙壁。我认为我有一切正确,但它不会运行,因为它说“局部变量墙可能尚未初始化”。如何初始化图像?

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);
  }
}

感谢所有回答我的人。我没有意识到我只需要设置wall = null。

3 个答案:

答案 0 :(得分:4)

您的图片确实已使用语句

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

然而,编译器抱怨,因为该语句可能会失败,因为它在try / catch块中。只是“满足”编译器的一种可能方法是将Image变量设置为null:

Image wall = null;

答案 1 :(得分:2)

您正在正确初始化图像。 Java抱怨的原因是你在try块中拥有它。尝试块不能保证运行,你不能弥补代码在catch块中失败的可能性,所以你(更重要的是,Java)不能确定那个墙将会当你调用window.drawImage()时存在。可能的修复方法是(删除导入但需要一些代码供参考):

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);
  }
}

答案 2 :(得分:1)

始终初始化声明为class的变量很重要

图片墙= null;