Java getClass(). GetResource ( "file" ) приводит к NullPointerException

Я следую zetcode Snake java games tutorial и всегда получаю эту ошибку:

ImageIcon iid = new ImageIcon(this.getClass().getResource("ball.png"));
ball = iid.getImage();

Exception in thread "main" java.lang.NullPointerException
    at javax.swing.ImageIcon.<init>(Unknown Source)
    at snake2.Board.<init>(Board.java:52)
    at snake2.Snake.<init>(Snake.java:10)
    at snake2.Snake.main(Snake.java:22)

Я только что скопировал и вставил код, чтобы увидеть, как он работает. Они тоже в правильных пакетах; но когда я пытаюсь запустить его, я всегда получаю эту ошибку.

Ответ 1

Изображение должно быть в том же пакете (папка в терминах ОС) как скомпилированный класс. Проверьте, есть ли у вас как .class, так и .png в той же папке. Если нет, вы можете использовать пути, связанные с classpath, в getResource(..), начиная с /

Ответ 2

Попробуйте следующее:

ImageIcon iid = new ImageIcon(this.getClass()
                  .getClassLoader().getResource("ball.png"));
ball = iid.getImage();

Убедитесь, что изображение находится в той же папке, что и файл java.

Ответ 3

Попробуйте использовать System.out.println(System.getProperty("java.class.path"));, чтобы узнать местоположение вашего .class файла и поместить изображения в эту папку.

Ответ 4

Весьма опасно загружать ресурсы с использованием относительных путей, я всегда рекомендую использовать абсолютные пути, поэтому

 /ball.png

если изображение находится в корне вашего пути к классам или добавлено путь к местоположению.

Ответ 5

Вы должны поместить файл изображения (ball.png) в свой путь к классам. Подробнее см. Javadoc.

Ответ 6

если ресурс находится в вашем пути к классу, тогда вы должны попробовать "this.getClass(). getClassLoader(). getResource (" ball.png ")". Для того, чтобы ваш фактический код работал, ball.png должен находиться в том месте, где находится ваш .class файл (т.е. Внутри пакета).

Ответ 7

Вам может потребоваться добавить файл в свои ресурсы сборки, например:

<build>
    <resources>
        <resource>
            <directory>path\to\resources</directory>
            <includes>
                <include>ball.png</include>
            </includes>
        </resource>
    </resources>

Ответ 8

Вы можете использовать только путь к своему изображению. Я думаю, это поможет вам: Используйте это:

ImageIcon iid = new ImageIcon("C:\\Users\\ranig\\My\\spaceinvaders\\ball.png");

Примечание. C:\\Users\\ranig\\My\\spaceinvaders\\ball.png - это весь путь изображения ball.png.

вместо этого:

ImageIcon iid = new ImageIcon(this.getClass().getResource("ball.png"));

Примечание. Если вы хотите только попробовать змеиный код и хотите получить результат.

Ответ 9

Я сделаю это простым для вас. Вот пример:

Icon bug = new ImageIcon(getClass().getResource("bug1.png"));

здесь "bug1.png" - это ресурс, и если он недоступен, он может вызвать ошибку, как вы обсуждали здесь.

Импортируйте изображение в тот же каталог, в котором находится ваша программа.

Вы также можете указать полный путь к нему.

ImageIcon(getClass().getResource("C://me/file/bug1.png"));

Ответ 10

Перейдите в проект > очистить в eclipse, он обновит проводник пакетов, и вы больше не столкнетесь с этой проблемой.

Ответ 11

Ресурс, так называемый, не найден. Он должен находиться в том же каталоге, что и файл .class, из которого вы его вызываете. См. Javadoc.