Portál AbcLinuxu, 10. května 2025 05:28

Dotaz: Java getResource()

7.8.2009 17:10 WikiDOG
Java getResource()
Přečteno: 583×
Odpovědět | Admin

V mem programu nacitam obrazky (jpg, png). Tyto obrazky jsou uvnitr vysledneho .jar souboru, proto je nacitam takto:

imageIcon = new ImageIcon(getClass().getResource(filename)); 

Pak jsem se rozhodl, ze dovolim uzivatelovi si nacist i vlastni obrazky, ktere ma ulozene nekde v filesystemu. Uzivatelovi tedy vybehne filechooser, on zvoli nejaky obrazek a jeho filename prijde do funkce, ktera obsahuje radek nahore. Jenze ten mi hodi chybu, ze obrazek nemuze najit. Na obrazky nacitane externe (mimo jar) mi funguje toto:

imageIcon = new ImageIcon(filename);

Proto jsem problem docasne (vim ze je to strasne prasarna) vyresil takto:

try
{
    imageIcon = new ImageIcon(getClass().getResource(filename));         
}
catch (NullPointerException ex)
{
    imageIcon = new ImageIcon(filename);
}

Ted jsem z toho ale zmateny, proc musim pouzivat dva ruzne zpusoby nacitani obrazku? Existuje nejaky zpusob, kdy je jedno jestli obrazek nacitam z jar nebo externe?

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

kouby avatar 7.8.2009 17:26 kouby | skóre: 27 | blog: init | Praha
Rozbalit Rozbalit vše Re: Java getResource()
Odpovědět | | Sbalit | Link | Blokovat | Admin

Konstruktor třídy ImageIcon přijímá URL což je váš filename. Takže stačí udělat obecnou metodu:

ImageIcon icon = getImageIcon(URL filename);

Tato metoda přijme URL a načte ikonku z obecné URL. Před zavoláním metody dáte do filename jenom příslušnou URL, buď voláním getClass().getResource(filename) a převedete na URL. Nebo z fileChooseru new URL(filename).

 

That's thirty minutes away. I'll be there in ten.
7.8.2009 20:43 WikiDOG
Rozbalit Rozbalit vše Re: Java getResource()

Vami popisovany zpusob funguje v prvnim pripade (getClass().getResource(filename)), ale v pripade fileChooseru dostanu tuto chybu:

java.net.MalformedURLException: no protocol: /home/wikidog/Downloads/pict/tree.jpg

Dany radek vypada takto:

loadImage(new URL(fc.getSelectedFile().toString()));
7.8.2009 20:56 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Java getResource()
Třída File má metodu toURI(), z URI získáte URL voláním toURL(). Váš kód je špatně, protože konstruktoru URL se jako parametr předává textové url, ne cesta k souboru.
7.8.2009 22:26 WikiDOG
Rozbalit Rozbalit vše Re: Java getResource()

Jak se lisi textova url od cesty k souboru?

7.8.2009 22:46 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Java getResource()
Cesta k souboru je např. /etc/passwd, URL je file:///etc/passwd.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.