我正试图为我的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。
答案 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;