GetResourceAsStream zasoby w pliku jar

0

Co mnie zdziwiło: zawsze wyciągałem z jarka jakieś zasoby poprzez odwołanie do klasy z której to wołam czyli Example.class.getresourceAsStream(/kat_example/bla.txt)
I wsio działało OK.
Raz spróbowałem na Object.class.getre........... i efekt był taki: w IDE działało ale jak już jarke miałem zbudowana i odpalałem to miałem błąd że nie umie znaleźć resource'a.
W jarce resource był takze po zmianie z Object na nazwę klasy wsio działa.

Tylko zastanawia mnie gdzie on szuka jeżeli nie w jarce w przypadku odwołania do Object????

0

Wydaje mi się że odwołanie "startuje" w miejscu gdzie masz daną klasę (w sensie plik *.class przy czym z pominięciem katalogów składających się na pakiet). Jeśli zrobisz to z poziomu klasy z jdk to tam będzie szukał twojego resource ;]

0

Class.getResource/AsStream korzysta wewnetrznie ze swojego classloadera. TwojaKlasa.class korzysta z CL ktory zna twoje zasoby, natomiast Object.class korzysta z root CL ktory ich nie zna. Jak zapewne wiesz, root CL nie pyta 'dzieci' o klasy i zasoby, tylko jest odwrotnie.

0

Tutaj kod z mojego JDK (1.7 update 7):

    public InputStream getResourceAsStream(String name) {
        name = resolveName(name);
        ClassLoader cl = getClassLoader0();
        if (cl==null) {
            // A system class.
            return ClassLoader.getSystemResourceAsStream(name);
        }
        return cl.getResourceAsStream(name);
    }

Jak widzisz, jesli class loder jest null (czyli root, czyli dla kazdej klasy z JDK) uzywana jest metoda getSystemResource/AsStream, a tam tego po prostu nie ma, jest dopiero w CL uzytego do ladowania klas z classpath Twojej aplikacji.

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