用ImageIO替换ImageIcon来加载图像

时间:2015-03-19 01:28:42

标签: java javax.imageio

我正在使用Eclipse制作java游戏。当我导出到一个可运行的jar并尝试在不同的计算机上运行游戏时,图像不可见。在检查网络和堆栈溢出以查找类似问题后,我认为这与我使用ImageIcon而不是ImageIO有关。但是,我不确定如何更改我的代码,以便我使用ImageIO代替ImageIcon上传图片。

以下是使用ImageIcon加载图片的方法

void loadImage() {

    ImageIcon earth_image_icon = new ImageIcon("earth2.png");
    earth = earth_image_icon.getImage();

    ImageIcon sun_image_icon = new ImageIcon("sun2.png");
    sun = sun_image_icon.getImage(); 

    ImageIcon asteroid_image_icon = new ImageIcon("asteroid.png");
    asteroid = asteroid_image_icon.getImage();

    ImageIcon bg_image_icon = new ImageIcon("bg_pr.png");
    background = bg_image_icon.getImage();

    ImageIcon shipA_image_icon = new ImageIcon("ship_alpha.png");
    ship_on_asteroid = shipA_image_icon.getImage();

    ImageIcon ship_image_icon = new ImageIcon("ship_beta.png");
    ship_no_thrust = ship_image_icon.getImage();

    ImageIcon shipL_image_icon = new ImageIcon("ship_betaL.png");
    ship_left_thrust = shipL_image_icon.getImage();

    ImageIcon shipR_image_icon = new ImageIcon("ship_betaR.png");
    ship_right_thrust = shipR_image_icon.getImage();

    ImageIcon shipU_image_icon = new ImageIcon("ship_betaU.png");
    ship_up_thrust = shipU_image_icon.getImage();

    ImageIcon shipD_image_icon = new ImageIcon("ship_betaD.png");
    ship_down_thrust = shipD_image_icon.getImage();

    ImageIcon leftarrow_image_icon = new ImageIcon("leftarrow.png");
    leftarrow = leftarrow_image_icon.getImage();

    ImageIcon rightarrow_image_icon = new ImageIcon("rightarrow.png");
    rightarrow = rightarrow_image_icon.getImage();

    ImageIcon downarrow_image_icon = new ImageIcon("downarrow.png");
    downarrow = downarrow_image_icon.getImage();

    ImageIcon uparrow_image_icon = new ImageIcon("uparrow.png");
    uparrow = uparrow_image_icon.getImage();

}

以下是将图像绘制到JPanel上的方法之一

void drawEarth(Graphics g) {

    g.drawImage(earth, earth_x_coordinate, earth_y_coordinate, this);
    Toolkit.getDefaultToolkit().sync();
}

如何转换为使用ImageIO?我已经检查了Oracle文档,但是我正在试图解决这个问题,而且我对编程和java非常陌生。

更新有人建议this可能是我特殊问题的解决方案,但我尝试了这篇文章中给出的答案,但这些答案对我的案例不起作用。

2 个答案:

答案 0 :(得分:1)

您需要在已编译的jar中包含图像资源。如果您使用像eclipse这样的IDE,那么执行此操作的一种简单方法是创建resimg文件夹并将文件放在那里。 (使用给定here的方法。)

在这种情况下,您可能不需要使用ImageIO。但是,如果您仍想使用ImageIO(由于其对格式的更广泛支持以及更好的异常处理(如评论中所述),建议使用Icon foo = new ImageIcon(ImageIO.read(getClass().getResource("foo.png"))),您可以执行以下操作:

{{1}}

答案 1 :(得分:0)

我在eclipse中创建了一个新项目,并将类文件复制到新项目的src文件夹中。然后,我创建了一个资源文件夹,将其添加到构建路径,在该资源文件夹中创建了一个图像包,并将图像复制到该图像包中。出于某种原因,这一切都有效。谢谢大家的帮助