Hola:
Si el recurso está dentro del jar, puedes usar rutas relativas o absolutas, puesto que estas últimas siempre empiezan en el principio del jar y no hacen en ningúan caso referencia al disco duro, al usb ni a nada.
Si obtienes el classloader de una clase, debes usar rutas relativas .. a donde esté ubicada esa clase dentro del jar. Para evitar esto, puedes poner un / delante, usando un path absoluto dentro del jar (en tu caso con una / delante getResourceAsStream("/resources/fichero.txt"); O en tu caso, si tu clase está en paquete, entonces igual tienes que poner getResourceAsStream("../resources/fichero.txt") para hacer que del directorio "paquete" nos vayamos al raíz.
Si obtienes el classloader de ClassLoader.getContextClassLoader(), entonces no es el classloader de una clase y los recursos se buscarán en el raíz del jar y no tienes que poner la / , pero el path será absoluto dentro del jar, es decir ClassLoader.getClassLoader().getResourceAsStream(" resources/fichero.txt");
http://micro-blog.chuidiang.org/cont...sourceasstream
Cuando estás en netbeans lo encuentra porque si los classloader no lo encuentran siempre se acaba llamando al SystemClassLoader que busca en los directorios normales del disco y cuando corres en netbeans, el resources no está metido en un jar, sino en el disco duro como un fichero normal dentro del classpath y el system class loader lo encuentra.
http://www.techdarwinia.com/java-cla...xt-classloader
Se bueno.