Java jar中带有外部图像的ImageIcon
我正在做我的大学项目,它在我的IDE上运行,但当我试图直接从jar运行它时,它根本不会加载任何图像。所以我在proyect中创建了一个resources文件夹,但显然,它不起作用,因为我不知道如何调用它们。我已经阅读了很多使用“getClass().getResource()”方法的文章,但是它给了我一个空指针异常。有人帮忙吗?我要留下我的密码: (顺便说一句,这是一款megaman游戏): } 这是我在Eclipse项目中如何使用文件夹的图像: 我已经试过使用这个:Java jar中带有外部图像的ImageIcon,java,eclipse,embedded-resource,executable-jar,imageicon,Java,Eclipse,Embedded Resource,Executable Jar,Imageicon,我正在做我的大学项目,它在我的IDE上运行,但当我试图直接从jar运行它时,它根本不会加载任何图像。所以我在proyect中创建了一个resources文件夹,但显然,它不起作用,因为我不知道如何调用它们。我已经阅读了很多使用“getClass().getResource()”方法的文章,但是它给了我一个空指针异常。有人帮忙吗?我要留下我的密码: (顺便说一句,这是一款megaman游戏): } 这是我在Eclipse项目中如何使用文件夹的图像: 我已经试过使用这个: public GameO
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());
}
公共游戏对象(intx,inty,intvelx,intvely,String archivo){
这个.x=x;
这个。y=y;
this.velX=velX;
这是一个很好的例子;
主体=新的ArrayList();
ImageIcon imagen=新的ImageIcon(getClass().getResource(archivo));
委托人。添加(imagen);
mono=newjlabel(principal.get(0));
mono.setBounds(this.x,this.y,mono.getIcon().getIconWidth(),mono.getIcon().getIconHeight());
}
但是这给了我一个空指针异常,如果没有它,它就不是。任何帮助都是非常感谢的。提前谢谢 您需要以流的形式获取资源。这将为您提供一个
InputStream
,您可以使用它从jar加载图像
getClass()
getResourceAsStream()
获取InputStream
。请记住,您的src
文件夹将在jar中消失。他指出,李>
ImageIO.read()
并传递InputStream
以获取buffereImage
BufferedImage
是一个图像
,因此您可以将其强制转换为Image
类型的变量。那么,就这样做吧李>
ImageIcon
具有一个构造函数,该构造函数具有一个接受图像的构造函数李>
你完了 很难猜测什么时候我们只有一个屏幕截图,但通过查看您的图标,我怀疑您的资源
文件夹被排除在构建路径之外。在这种情况下,它不会复制到bin
文件夹,因此getResource
调用无法访问
尝试右键单击Resources
文件夹并选择“构建路径”→从弹出菜单中选择“包括”。图标应该从通用文件夹更改为类似于包的图标(尽管它看起来与包含类的包不同)。然后是一个GameObject.class.getResourceAsStream(“Resources/megamanpd.png”)代码>应该在Eclipse中工作
如果构建路径设置正确,那么生成jar应该会得到正确的默认设置,但是似乎已经手动添加了src/Resources/
文件夹到bin
内容中。因此,您可能必须手动修复设置。使用默认设置重新生成jar现在应该可以获得一个jar,其中getResource
可以正常工作。查看您的jar文件。它是否包含src文件夹?不,它不是,因为src是您在开发环境中存储源代码的地方。图像的路径应该是/Resources/megamanpd.png
,因为这就是图像在jar中的位置。事实上,是的,我的jar包含一个src文件夹,我是用Winrar打开的,还有一个src文件夹。@HectorHammett在加载时并不重要。忘了src
文件夹吧。那么你的jar结构就不好了。它不应该包含src文件夹。jar的内容应该与eclipse项目的bin文件夹的内容相同(或者与您决定命名eclipse项目的输出目录的内容相同)。@JBNizet我完全同意您的看法。JAR的内容应该是src
文件夹中的任何内容,但JAR中没有src
。出于某种原因,我的JAR中有一个src文件夹。我和温拉对峙了一下,就在那里。里面有我所有的照片。让我试试你给我的解决方案。我这样做了,它给了我这个错误:线程“main”java.lang.IllegalArgumentException中的异常:input==null@HectorHammett您要输入的路径是什么?getResourceAsStream
?我尝试了各种方法:“Resources/megamanpd.png”、“src/Resources/megamanpd.png”和“/Resources/megamanpd.png”。在所有情况下,您都有一个null
??
public MegamanSprite(int x, int y) {
super(x, y, 1, 1, "src/Resources/megamanpd.png");
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());
}