getClassLoader().getResource() возвращает ноль

У меня есть это тестовое приложение:

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());

    }
}

Когда я запускаю его из Eclipse, я получаю сообщение об ошибке:

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

Путь к классам (из файла.CLASSPATH)

<classpathentry kind="src" path="src"/>

В моей папке c:\project\src у меня есть только файл Test.java и каталог 'assets', который содержит pacman.png.

Что я делаю не так и как это решить?

4 ответа

Решение

Я бы сделал это так:

final InputStream stream;

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

"/assets/pacman.png" является абсолютным местоположением, тогда как "assets/pacman.png" является относительным местоположением.

Вам не нужна косая черта в начале при получении ресурса от ClassLoader потому что нет понятия "относительной" части для начала. Вам это нужно только тогда, когда вы получаете ресурс от Class где относительные пути идут от уровня пакета класса.

Кроме того, вы не хотите Test.class.getClass() как это получает класс Test.class, который будет Class<Class>,

Другими словами, попробуйте любую из этих строк:

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

Нажмите Upvote,

  • Когда вы используете .getClass().getResource(fileName) он считает, что местоположение fileName совпадает с местоположением вызывающего класса.
  • Когда вы используете .getClass().getClassLoader().getResource(fileName) он считает, что расположение файла является корневым - другими словами, папка bin

Хиты NullPointerException если файл на самом деле не существует там.

Источник:

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));

Выход;

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
    }
}

Это работает для меня:

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

какие ресурсы находятся в одной папке с выходным файлом Test.class (после неудачной проверки и отладки)

Другие вопросы по тегам