0

我想使用缓冲图像作为框架的背景。我使用 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")); 

但这并没有改变任何东西。我希望有人能告诉我这里出了什么问题。谢谢!

4

0 回答 0