我想使用缓冲图像作为框架的背景。我使用 mouselistener 来检测鼠标何时移动到特定区域以突出显示按钮但在其上绘制图像(newgame.jpg 或 loadgame.jpg)。当我在 ecplise 中执行它时一切正常,但是当我创建一个 Jar 文件时,我的背景不会加载。这是代码:
in the constructor:
try {
background = ImageIO.read(this.getClass().getResource("Images/SMAGE_achtergrond.jpg"));
newgame = ImageIO.read(this.getClass().getResource("Images/newgame.jpg"));
loadgame = ImageIO.read(this.getClass().getResource("Images/loadgame.jpg"));
} catch(Exception e){
e.printStackTrace();
}
....
...
the next method is being called every 10ms (increasing it to 1 second 5 seconds doesn't make it work)
public void refresh()
{
BufferedImage temp = new BufferedImage(800,400,BufferedImage.TYPE_INT_ARGB);
Graphics g2 = temp.getGraphics();
g2.drawImage(background,0,0,null);
if (newGame){
g2.drawImage(newgame,36,282,null);
}
if (loadGame)
{
g2.drawImage(loadgame, 37, 327, null);
}
Graphics g = panel.getGraphics();
g.drawImage(temp,0,0,null);
}
有一个线程重复调用refresh()。现在是奇怪的部分:当 newGame/loadgame 为真时, g2.drawImage(newgame/loadgame,36,282,null); 被正确执行。但是该方法的其余部分总是被忽略。所有图像的路径都是相同的,它们都在同一个位置,所以这不是问题。
只有当我把它放在一个 jar 文件中时它才不起作用。
我也试过用这个:
background = Toolkit.getDefaultToolkit().getImage(getClass().getClassLoader().getResource("Images/SMAGE_achtergrond.jpg"));
newgame = Toolkit.getDefaultToolkit().getImage(getClass().getClassLoader().getResource("Images/newgame.jpg"));
loadgame = Toolkit.getDefaultToolkit().getImage(getClass().getClassLoader().getResource("Images/loadgame.jpg"));
但这并没有改变任何东西。我希望有人能告诉我这里出了什么问题。谢谢!