ImageIcon与jar中的外部图像

时间:2013-11-26 08:04:25

标签: java eclipse embedded-resource executable-jar imageicon

我正在做我的大学项目,它在我的IDE上运行,但是当我尝试直接从jar运行它时,它根本不加载任何图像。所以我在我的proyect中创建了一个资源文件夹,但显然,它不起作用,因为我不知道如何调用它们。我已经使用“getClass()。getResource()”方法阅读了很多帖子,但它给了我一个空指针异常。有帮助吗?我要离开我的代码: (顺便说一下,这是一个超级游戏):

public GameObject(int x,int y, int velX,int velY,String archivo){
    this.x = x;
    this.y = y;
    this.velX = velX;
    this.velY = velY;
    principal = new ArrayList<ImageIcon>();
    ImageIcon imagen = new ImageIcon(archivo);
    principal.add(imagen);
    mono = new JLabel(principal.get(0));    
    mono.setBounds(this.x,this.y,mono.getIcon().getIconWidth(),mono.getIcon().getIconHeight());
}

这是我的主要“Sprite”代码,我只是创建了从这个类扩展的其他精灵。 “Archivo”变量,它是.png文件所在的字符串,这里我举了一个如何调用它的例子:

public MegamanSprite(int x, int y) {
    super(x, y, 1, 1, "src/Resources/megamanpd.png");

}

这里是我在Eclipse项目中如何拥有文件夹的图像: My clases

我已经尝试过使用它了:

public GameObject(int x,int y, int velX,int velY,String archivo){
this.x = x;
this.y = y;
this.velX = velX;
this.velY = velY;
principal = new ArrayList<ImageIcon>();
ImageIcon imagen = new ImageIcon(getClass().getResource(archivo));
principal.add(imagen);
mono = new JLabel(principal.get(0));    
mono.setBounds(this.x,this.y,mono.getIcon().getIconWidth(),mono.getIcon().getIconHeight());
}

但是这给了我一个空指针异常,没有它就没有。任何帮助都会非常准确。提前谢谢!

2 个答案:

答案 0 :(得分:0)

您需要将资源作为流来获取。这将为您提供InputStream,您可以使用它从jar中加载图像。

  1. 使用Class
  2. 将对象的类别设为getClass()
  3. 使用getResourceAsStream()获取InputStream。请记住,您的src文件夹将在jar中消失。 JB Nizet指出了这一点。
  4. 然后使用ImageIO.read()并传递InputStream以获取BufferedImage
  5. BufferedImageImage,因此您可以将其转换为Image类型的变量。所以,那样做。
  6. ImageIcon有一个构造函数,它有一个接受Image的构造函数。
  7. 你完成了!

答案 1 :(得分:0)

很难猜到我们唯一拥有的是截图,但通过查看您的图标,我怀疑您Resources文件夹是否从构建路径中排除。在这种情况下,它不会复制到bin文件夹,因此getResource调用无法访问。

尝试右键单击Resources文件夹,然后从弹出菜单中选择“构建路径”→“包含”。该图标应该从通用文件夹更改为类似于包的图标(虽然它看起来与包含类的包不同)。然后GameObject.class.getResourceAsStream( "Resources/megamanpd.png");应该在Eclipse中工作。

如果构建路径设置正确,生成jar应该得到正确的默认设置,但似乎手动添加了除src/Resources/内容之外的bin文件夹。因此您可能需要手动修复设置。使用默认设置重新生成jar现在应该可以获得getResource正常工作的jar。