Java – getClassLoader (). GetResource () me está volviendo loco

Tengo esta aplicación de prueba:

import java.applet.*; import java.awt.*; import java.net.URL; public class Test extends Applet { public void init() { URL some=Test.class.getClass().getClassLoader().getResource("/assets/pacman.png"); System.out.println(some.toString()); System.out.println(some.getFile()); System.out.println(some.getPath()); } } 

Cuando lo ejecuto desde Eclipse, obtengo el error:

 java.lang.NullPointerException at Test.init(Test.java:9) at sun.applet.AppletPanel.run(Unknown Source) at java.lang.Thread.run(Unknown Source) 

Classpath (del archivo .CLASSPATH)

  

En mi carpeta c: \ project \ src, solo tengo el archivo Test.java y el directorio ‘assets’ que contiene pacman.png.

¿Qué estoy haciendo mal y cómo resolverlo?

Lo haría de esta manera:

 final InputStream stream; stream = Test.class.getResourceAsStream("assets/pacman.png"); System.out.println("Stream = " + stream); 

“/assets/pacman.png” es una ubicación absoluta, mientras que “assets / pacman.png” es una ubicación relativa.

No necesita la barra al comienzo cuando obtiene un recurso de un ClassLoader , porque no hay idea de una parte “relativa” para empezar. Solo lo necesita cuando obtiene un recurso de una Class donde las rutas relativas van desde el nivel del paquete de la clase.

Además, no desea Test.class.getClass() ya que obtiene la clase de Test.class, que será Class .

En otras palabras, pruebe cualquiera de estas líneas:

 URL viaClass=Test.class.getResource("/assets/pacman.png"); URL viaLoader=Test.class.getClassLoader().getResource("assets/pacman.png"); 

Haga clic en Subir,

  • Cuando utiliza .getClass().getResource(fileName) , considera que la ubicación de fileName es la misma ubicación que la de la clase que realiza la llamada.
  • Cuando usa .getClass().getClassLoader().getResource(fileName) , considera que la ubicación de fileName es la raíz – en otras palabras, la carpeta bin

NullPointerException si el archivo no existe realmente allí.

Fuente:

 package Sound; public class ResourceTest { public static void main(String[] args) { String fileName = "Kalimba.mp3"; System.out.println(fileName); System.out.println(new ResourceTest().getClass().getResource(fileName)); System.out.println(new ResourceTest().getClass().getClassLoader().getResource(fileName)); 

OutPut;

 Kalimba.mp3 file:/C:/Users/User/Workspaces/MyEclipse%208.5/JMplayer/bin/Sound/Kalimba.mp3 file:/C:/Users/User/Workspaces/MyEclipse%208.5/JMplayer/bin/Kalimba.mp3 } } 

Esto funciona para mí:

URL viaClass = Test.class.getResource (“assets / test.html”);

qué activos están en la misma carpeta con el archivo de salida Test.class (después de una miserable comprobación y depuración)