Java: исключение NullPointerException из class.getResource (...) - PullRequest
6 голосов
/ 17 мая 2011

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

prayerLevel.setIcon(new ImageIcon(getClass().getResource("/icons/icon_prayer.png")));

Теперь в моей программе папка / icons / существует.Я не знаю, имеет ли это значение, но файл класса находится в пакете, где папка с иконками находится в папке проекта (когда вы увидите папки bin и src).

Я посмотрелна некоторое время, и я не мог найти решение, которое могло бы помочь мне решить проблему.Может, кто-нибудь из вас может помочь?

Редактировать: кто-то спросил мою иерархию папок:

Folder Hierarchy

Я знаю, что файл класса не находится в той же папке, что изначки есть, но я создал приложения, в которых мне приходилось загружать файлы из другой папки и делать / folder / всегда использовать для работы.

Edit 2:

System.out.println(getClass().getResource("/icons/icon_prayer.png") == null);

Печатает true.

Ответы [ 5 ]

11 голосов
/ 17 мая 2011

Я считаю, что NPE выбрасывается из конструктора ImageIcon, когда getResource возвращает null.

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

getClass().getClassLoader().getResource("/icons/icon_prayer.png")

Или:

ClassLoader.getSystemResource("/icons/icon_prayer.png")
3 голосов
/ 17 мая 2011

Насколько я знаю, getResource() будет искать расположение известных ресурсов, другими словами, если папка /icons/ не рассматривается как папка ресурса, она не будет, как вы ожидали. Насколько я знаю, есть два способа обойти это:

1) Установите папку значков в качестве ресурса для приложения, тогда вы можете использовать getResource(), например URL css_url = getClass().getResource("/resource/style.css");

Подробнее об этой опции см. http://lj4newbies.blogspot.com/2008/03/using-classgetresource-load-resource.html

2) Получить значок как обычный файл без использования метода getResource(). Это на самом деле рекомендуется в Руководствах по Swing по собственной документации Sun / Oracle .

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

Значок ImageIcon = новый ImageIcon ( "изображения / middle.gif", "красивый, но бессмысленный знак");

Надеюсь, это поможет, удачи!

1 голос
/ 09 августа 2016

Старый поток, но поскольку я столкнулся с подобной проблемой только сейчас ...

Я использую Eclipse, и я скопировал файл в папку "resources" с помощью системных команд (cp).Тем не менее, затмение выбросило NullPointerException, потому что я не обновил папку «ресурсы».Итак, файл был там, но Eclipse его не увидел.

Итак, в Eclipse: «Package Explorer» -> «resources» -> щелчок правой кнопкой мыши -> refresh.Это исправило это для меня.

1 голос
/ 17 февраля 2016

Я добавил свою музыку, изображения и т. Д. В папку, добавленную в путь сборки. Тогда я просто использовал

URL url="CurrentClass".class.getClassLoader().getResource("media file name not the path");
setIconImage(new ImageIcon(url.getPath()).getImage());

, чтобы установить значок изображения.

0 голосов
/ 17 мая 2011

Единственное, что может бросить NullPointerException в этой строке кода, это первый ., что означает, что prayerLevel равно нулю.

...