Ladowanie zasobow z .jar

0

Czesc,
Od około tygodnia bawie sie java. Jak do tej pory wszystkie problemy na ktore natrafialem udawalo sie rozwiazac korzystajac z google i kursow\tutoriali, jednak na rozwiazanie najnowszego nie mam żadnego pomyslu, google tez nie jest pomocny. Problem polega na tym, ze uruchamiajac moja minigre (wykorzystujaca biblioteke GTGE) z poziomu netbeans-a (ver 6.7) wszystko chodzi bez problemu, jednak kiedy chce odpalic przez konsole poleceniem java -jar Spacecraft2dGame.jar wywala taki error:

uncaught error fetching image:
java.lang.NullPointerExcepion

at sun.awt.image.URLImageSource.getConection<Unknown Source>
at sun.awt.image.URLImageSource.getDecoder<Unknown Source>
at sun.awt.image.InputStreamImageSource.doFetch<Unknown Source>
at sun.awt.image.ImageFetcher.fetchloop<Unknown Source>
at sun.awt.image.ImageFetcher.run<Unknown Source>

Wiem co on oznaczy, tylko nie rozumiem dlaczego tak sie dzieje. Jestem pewny, ze m.in.ten kawałek kodu jest winowajca:
SpaceCraft.class.getResource("/media/graphics/spacerocket.png")

Wywolywany jest na rzecz statycznego pola w klasie SpaceCraft

Bede bardzo wdzieczny za pomoc.

ps. Pracuje na Windows Vista Home Premium.

0

po pierwsze w Windows foldery w sciezce oddziela sie przez \ a nie przez /
czyli: "\media\graphics\spacecraft.png"

po drugie zeby to bylo uniwersalne, to jakos tam mozna pobrac systemowy delimiter folderow w sciezce (zeby na sztywno nie wpisywac \)

po trzecie jesli to jest metoda statyczna, to wystarczy:
SpaceCraft.getResource("...");

0
  1. You missed, mate -> Niestety w wersji \ rowniez nie dziala, co wiecej ten sam blad zaczal sie pojawiac w netbeans-ie.

Jezeli jednak chodzi uzywanie znakow / to widzialem je wewnatrz plikow .bat (w odniesieniu okreslania sciezek) sluzacych do uruchamiania poszczegolnych skryptow z pakietu ruby on rails. O dziwo wszystko sie uruchamialo.

0

Nie uzywam NetBeans. W Eclipse jest analogiczny problem jeżeli przy tworzeniu projektu zaakceptuje się propozcję by powstały dwa katalogi: bin dla klas, src dla źródeł. Przy uruchamianiu programu w Eclipse katalogiem bieżącym jest nadakatalog dla bin i src, i adresy zasobów należy podawać względem tego katalogu. Przy uruchamianiu "z ręki" (polecenie w konsoli) adres należy podać względem podkatalogu bin.

0

Najlepiiej zasoby wladowac do katalogu src. Nastepnie, podczas budowania (eclipse domyslnie robi to z automatu) znajda sie one w bin, a podczas exportu do jara znajda sie w jarze. Teraz wystarczy:
JakasKlasa.class.getResource("/sciezka/do/res") i jest
Sprawdz jeszcze sciezke bez wiodacego /, nigdy nie pamietam czy to ma byc z czy bez, poniewaz ClassLoader.getResource i Class.getResource maja to troche inaczej.
Caly trik polega na tym aby zasob byl w classpath, i aby classloader ktory probuje wczytac ten zasob mial dostep do niego.

0

Dziekuje za udzial w watku. Nie testowalem jeszcze metod przez was podanych, jednak znalazlem rozwiazanie mojego problemu, mianowicie jest nim:

ClassLoader.getSystemResource("media/graphics/spacerocket.png")

W tej postaci dziala na windowsie, wniosek -> nie trzeba sie przejmowac delimiter-ami sciezek
systemowych :-)

Dziekuje wszystkim za chec pomocy :-)

ps. Swoja droga polecam biblioteke GTGE do pisania malych gier desktopowych, bardzo przyjemne narzedzie.

0

Moje doświadczenie z katalogami jest takie, że można się nie przejmować delimeterami ścieżek przy czytaniu plików graficznych. Przy innych plikach trzeba.

0

Dzieki, za informacje bede mial to na wzgledzie jezeli kiedys mi sie program bedzie sypal z powodou podobnego problemu ;-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1