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.