[NetBeans] Błąd ładowania zasobu

0

Podczas pracy z NetBeans 6.7 natrafiłem na taki problem:

Oprócz głównej paczki z kodami źródłowymi utworzyłem trzy kolejne: icons (zawierającą obrazki ikon), images (zawierającą tła elementów) i maps (zawierającą stworzone przeze mnie mapy do gry, we własnym formacie).

Gdy ładuję ikony oraz obrazki w ten sposób:

       java.net.URL imgURL = MainBoard.class.getResource("images/about.png");
	Toolkit tk = this.getToolkit();

        if (imgURL != null) {
            aboutImage  = tk.getImage(imgURL);
        }

jest wszystko w porządku.

Natomiast gdy chcę otworzyć plik:

	java.net.URL fileURL = MainBoard.class.getResource("maps/map.hex");

	File file = new File(fileURL.getPath());
	FileInputStream file_input;

	try {
	    file_input = new FileInputStream(file);
	    DataInputStream data_in = new DataInputStream (file_input);

	    for (int i=0; i < WIDTH_MAX; i++)
		for(int j=0; j < HEIGHT_MAX; j++)
		    map[i][j] = data_in.readInt();
	    file_input.close ();
	} catch (IOException e) {
	    System.out.println ("IO exception = " + e );
	}

to dostaję wyjątek FileNotFoundException (wywołanie file.exist() zwróciło false).

Gdzie powinienem umieścić te pliki-mapy oraz jak konstruować ścieżkę dostępu do nich, aby były widoczne?

Jeśli umieszczę je w katalogu głównym i odwołam się poprzez zwykłe "map.hex", to jest wszystko w porządku. Ale wtedy po zbudowaniu projektu będę musiał je za każdym razem dołączać ręcznie do folderu z plikiem wykonywalnym (a tego chciałbym uniknąć).

Będę wdzięczny za wszelką pomoc!

// EDIT: zmieniłem tylko < code > na < code=java >

0
java.net.URL fileURL = MainBoard.class.getResource("maps/map.hex");

Spróbuj może z getResourceAsStream i z tego później czytać.

0

URL.getPath() zwraca ścieżkę w takim formacie:
/C:/Documents%20and%20Settings/xxx/My%20Documents/workspace/eclipse/Test/bin/test/some_file.txt

Nie pamiętam jak się to nazywa, ale wiadomo o co chodzi (slash przed nazwą, %20 zamiast spacji). Dlatego plik utworzony z tej ścieżki nie istnieje.

0

Dzięki za zwrócenie uwagi na ten aspekt. Nie pomyślałem, że metody z Toolkit mają pewnie własny mechanizm zamiany tego "adresu URL".

Zrobiłem taką modyfikację:

	String path = MainBoard.class.getResource("maps/map.hex").getPath();
	path = path.substring(1);
	path = path.replace("%20", " ");

	File file = new File(path);

i już działa, ale wciąż tylko wtedy gry uruchamiam poprzez IDE.

Jak już wspominałem, chciałbym mieć wszystko w jednym pliku JAR, a powyższe rozwiązanie [chyba] tego nie gwarantuje, sądząc po efektach jakie otrzymuję.

0

Spróbuj z getReasourceAsStream.

0

Przepraszam, nie zauważyłem Twojej wcześniejszej odpowiedzi. Faktycznie, z getResourceAsStream() zadziałało.

Bardzo dziękuję za pomoc!

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