我正在做我的大学项目,它在我的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项目中如何拥有文件夹的图像:
我已经尝试过使用它了:
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());
}
但是这给了我一个空指针异常,没有它就没有。任何帮助都会非常准确。提前谢谢!
答案 0 :(得分:0)
您需要将资源作为流来获取。这将为您提供InputStream
,您可以使用它从jar中加载图像。
Class
getClass()
getResourceAsStream()
获取InputStream
。请记住,您的src
文件夹将在jar中消失。 JB Nizet指出了这一点。 ImageIO.read()
并传递InputStream
以获取BufferedImage
BufferedImage
是Image
,因此您可以将其转换为Image
类型的变量。所以,那样做。 ImageIcon
有一个构造函数,它有一个接受Image
的构造函数。 你完成了!
答案 1 :(得分:0)
很难猜到我们唯一拥有的是截图,但通过查看您的图标,我怀疑您Resources
文件夹是否从构建路径中排除。在这种情况下,它不会复制到bin
文件夹,因此getResource
调用无法访问。
尝试右键单击Resources
文件夹,然后从弹出菜单中选择“构建路径”→“包含”。该图标应该从通用文件夹更改为类似于包的图标(虽然它看起来与包含类的包不同)。然后GameObject.class.getResourceAsStream( "Resources/megamanpd.png");
应该在Eclipse中工作。
如果构建路径设置正确,生成jar应该得到正确的默认设置,但似乎手动添加了除src/Resources/
内容之外的bin
文件夹。因此您可能需要手动修复设置。使用默认设置重新生成jar现在应该可以获得getResource
正常工作的jar。