我正在使用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可能是我特殊问题的解决方案,但我尝试了这篇文章中给出的答案,但这些答案对我的案例不起作用。
答案 0 :(得分:1)
您需要在已编译的jar中包含图像资源。如果您使用像eclipse这样的IDE,那么执行此操作的一种简单方法是创建res
或img
文件夹并将文件放在那里。 (使用给定here的方法。)
在这种情况下,您可能不需要使用ImageIO
。但是,如果您仍想使用ImageIO
(由于其对格式的更广泛支持以及更好的异常处理(如评论中所述),建议使用Icon foo = new ImageIcon(ImageIO.read(getClass().getResource("foo.png")))
,您可以执行以下操作:
{{1}}
答案 1 :(得分:0)
我在eclipse中创建了一个新项目,并将类文件复制到新项目的src文件夹中。然后,我创建了一个资源文件夹,将其添加到构建路径,在该资源文件夹中创建了一个图像包,并将图像复制到该图像包中。出于某种原因,这一切都有效。谢谢大家的帮助