3 回答

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超4個(gè)贊
要從JAR資源加載圖像,請(qǐng)使用以下代碼:
Toolkit tk = Toolkit.getDefaultToolkit();
URL url = getClass().getResource("path/to/img.png");
Image img = tk.createImage(url);
tk.prepareImage(img, -1, -1, null);

TA貢獻(xiàn)1880條經(jīng)驗(yàn) 獲得超4個(gè)贊
我發(fā)現(xiàn)您的代碼有兩個(gè)問題:
getClass().getResourceAsStream(imgLocation);
這假定圖像文件與該代碼所屬類的.class文件位于同一文件夾中,而不位于單獨(dú)的資源文件夾中。嘗試以下方法:
getClass().getClassLoader().getResourceAsStream("resources/"+imgLocation);
另一個(gè)問題:
byte abyte0[] = new byte[imageStream.available()];
該方法InputStream.available()也不會(huì)返回流中的字節(jié)總數(shù)!它返回沒有阻塞的可用字節(jié)數(shù),通常要少得多。
您必須編寫循環(huán)以將字節(jié)復(fù)制到臨時(shí)文件,ByteArrayOutputStream直到到達(dá)流的末尾?;蛘撸褂胓etResource()和使用createImage()帶有URL參數(shù)的方法。

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超3個(gè)贊
例如,在NetBeans項(xiàng)目中,在src文件夾中創(chuàng)建一個(gè)resources文件夾。將您的圖像(jpg,...)放在那里。
無(wú)論您使用ImageIO還是Toolkit(包括getResource),都必須在映像文件的路徑中包含前導(dǎo)/:
Image image = Toolkit.getDefaultToolkit().getImage(getClass().getResource("/resources/agfa_icon.jpg"));
setIconImage(image);
如果此代碼位于JFrame類內(nèi),則圖像將作為標(biāo)題欄中的圖標(biāo)添加到框架中。
添加回答
舉報(bào)