Originariamente inviato da robyp7582
qualcuno mi sa spiegare perchè (soprattutto se si deve impacchettare le classi in un file jar) occorre leggere qualsiasi file come in questo caso un'immagine usando getResourceAsStream?:
Se vuoi che le "risorse" da caricare stiano insieme alle classi, allora puoi appunto sfruttare getResource()/getResourceAsStream() che sfruttano lo stesso meccanismo che il classloader usa per trovare le classi.
In tal caso non centra più tanto dove stanno fisicamente le risorse ma centra il "classpath".

Originariamente inviato da robyp7582
String res = com/../.. (percorso relativo dalla directory dei file class)

InputStream is = this.getClass().getClassLoader().getResourceAsStre am(res);
In realtà si può fare anche più semplice.

Immagina di avere una classe Pippo in un package com.prova (cioè il nome completo è com.prova.Pippo). Il file .class deve stare in un percorso com/prova. Se lì sotto, nella stessa directory prova, hai ad esempio una immagine pluto.gif, allora puoi ottenere l'URL della risorsa facendo:

URL url = Pippo.class.getResource("pluto.gif")

o

URL url = Pippo.class.getResource("/com/prova/pluto.gif")

Nel primo caso, non inizia con '/' e quindi si usa il package della classe Pippo. Nel secondo caso, la risorsa è indicata in modo assoluto con ciò che c'è dopo il primo '/'.