Java getClass (). GetResource ("file") приводит к исключению NullPointerException - PullRequest
15 голосов
/ 24 апреля 2011

Я следую учебнику по java-играм zetcode и всегда получаю эту ошибку:

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)

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

Ответы [ 11 ]

12 голосов
/ 24 апреля 2011

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

6 голосов
/ 24 апреля 2011

Попробуйте это:

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

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

5 голосов
/ 24 мая 2013

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

3 голосов
/ 24 апреля 2011

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

 /ball.png

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

1 голос
/ 24 апреля 2011

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

0 голосов
/ 20 февраля 2017

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

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

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

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

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

ImageIcon(getClass().getResource("C://me/file/bug1.png"));
0 голосов
/ 08 ноября 2016

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

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

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

0 голосов
/ 07 ноября 2016

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

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

0 голосов
/ 25 июня 2015

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

0 голосов
/ 24 апреля 2011

, если ресурс находится в вашем пути к классам, вы должны попробовать "this.getClass (). GetClassLoader (). GetResource (" ball.png ")". Чтобы действительный код работал, ball.png должен находиться в том месте, где находится ваш .class-файл (т.е. внутри пакета).

...