Děkuji ing. Jaroslavu Kačerovi za to, že měl dostatek trpělivosti, aby nalezl řešení a ukázal mi jej.
Chcete-li přenášet v JAR souboru, který bude spouštěn bez rozbalení, i externí data, je nutné trochu změnit zdrojový kód .java programu.
Celý trik je v tom, že např. pro natažení obrázku je možné použít jen sekvenci:
Toolkit t = Toolkit.getDefaultToolkit();
Image imgIkona = t.getImage("ikona.gif");
která funguje spolehlivě při spouštění .class souboru, ale již nefunguje při spouštění .jar souboru. Je nutné přidat jednu řádku kódu:
Toolkit t = Toolkit.getDefaultToolkit();
URL cestaKIkone =
getClass().getResource("ikona.gif");
Image imgIkona = t.getImage(cestaKIkone);
Pak již vše funguje podle předpokladů.
Zde je na ukázku celý
zdrojový kód. (Nekamenujte mne, prosím, za
používání magických čísel. Snažil jsem se o co
nejkratší kód.)
V programu se načítají dva externí obrázky -- první je
ikona na liště, druhý obrázek kočky na ploše.
Na následujícím obrázku vidíte, jak vše funguje při spuštění z .class souboru.
Stejně to funguje i po zabalení (v souboru zabaleny.jar je i zdrojový kód) a spuštění bez rozbalení. Soubor pomocny.txt slouží jen pro přípravu souboru Manifestu.