3 回答

TA贡献1836条经验 获得超4个赞
要从JAR资源加载图像,请使用以下代码:
Toolkit tk = Toolkit.getDefaultToolkit();
URL url = getClass().getResource("path/to/img.png");
Image img = tk.createImage(url);
tk.prepareImage(img, -1, -1, null);

TA贡献1880条经验 获得超4个赞
我发现您的代码有两个问题:
getClass().getResourceAsStream(imgLocation);
这假定图像文件与该代码所属类的.class文件位于同一文件夹中,而不位于单独的资源文件夹中。尝试以下方法:
getClass().getClassLoader().getResourceAsStream("resources/"+imgLocation);
另一个问题:
byte abyte0[] = new byte[imageStream.available()];
该方法InputStream.available()也不会返回流中的字节总数!它返回没有阻塞的可用字节数,通常要少得多。
您必须编写循环以将字节复制到临时文件,ByteArrayOutputStream直到到达流的末尾。或者,使用getResource()和使用createImage()带有URL参数的方法。

TA贡献1777条经验 获得超3个赞
例如,在NetBeans项目中,在src文件夹中创建一个resources文件夹。将您的图像(jpg,...)放在那里。
无论您使用ImageIO还是Toolkit(包括getResource),都必须在映像文件的路径中包含前导/:
Image image = Toolkit.getDefaultToolkit().getImage(getClass().getResource("/resources/agfa_icon.jpg"));
setIconImage(image);
如果此代码位于JFrame类内,则图像将作为标题栏中的图标添加到框架中。
添加回答
举报