Значок JLabel неправильно импортирован на Java с проектом Maven

Я делаю проект в системе библиотеки GUI. Моя IDE - Netbeans. Раньше я устанавливал изображения значков Jlabel из внешних папок, но я хочу, чтобы изображения загружались из папки проекта, поэтому я импортировал изображения в папку проекта из опции NetBeans «Импорт в проект». Когда я скомпилировал программу, она показывает «NullPointerException» в Jlabelxxx.setIcon (). Это означает, что он не загружает изображения из моего пакета / папки. Я знаю, что такое исключение нулевого указателя :). Мой код в порядке, но я не знаю, почему изображения не загружаются из папки проекта.

Я использую графический интерфейс Netbeans для создания дизайна Jswing. Моя структура каталогов показана ниже:

введите здесь описание изображения

Абсолютный путь проекта: C: \ Users \ nisha \ Documents \ NetBeansProjects \ LibraryManagementSystem

Абсолютный путь к изображениям: C: \ Users \ nisha \ Documents \ NetBeansProjects \ LibraryManagementSystem \ src \ main \ java \ gpjlibrarymanagementsystem \ icons

У меня в папке проекта "LibraryManagementSysten" 2 пакета. Ниже у меня есть 3 пакета "" "gpjlibrarymanagementsystem" "gpjlibrarymanagementsystem.icons". В пакете по умолчанию ничего нет. У второго есть файлы JFrame, а у последнего есть изображения. Пожалуйста, посмотрите изображение, размещенное выше, чтобы понять мою структуру каталогов.

Я пытался создать разные каталоги в одном проекте, но это не работает.

Примеры кода, в котором я получаю исключение NullPointerException:

    lblMinimize.setIcon(new javax.swing.ImageIcon(getClass().getResource("/gpjlibrarymanagementsystem/icons/icons8-minus-24.png")));

    lblMaximize.setIcon(new javax.swing.ImageIcon(getClass().getResource("/gpjlibrarymanagementsystem/icons/icons8-maximize-button-20.png")));

    lblClose.setIcon(new javax.swing.ImageIcon(getClass().getResource("/gpjlibrarymanagementsystem/icons/icons8-multiply-24.png")));

Как видите, в соответствии с моей структурой каталогов мой код правильный.


person Nishant Bhagat    schedule 06.11.2019    source источник
comment
Stack Trace находится здесь: imgur.com/a/RFcoGOk   -  person Nishant Bhagat    schedule 06.11.2019
comment
Изображение вашего дерева, похоже, указывает на то, что это каталог icon, а не icons.   -  person VGR    schedule 06.11.2019


Ответы (5)


Я решил эту проблему. Изображения должны быть добавлены в папку ресурсов: yourprojectname \ src \ main \ resources. В моем случае: LibraryManagementSystem \ src \ main \ resources \ icons. Все файлы изображений находятся в папке с иконками :)

В maven файловая структура должна выглядеть так:

> Project |-- pom.xml `-- src
>     `-- main
>         `-- resources

Однако все ваши ресурсы могут быть не в src / main / resources. Таким образом, вам нужно будет указать эти каталоги, добавив следующее в свой POM.

<project>
 ...
 <build>
   ...
   <resources>
     <resource>
       <directory>[your folder here]</directory>
     </resource>
   </resources>
   ...
 </build>
 ...
</project>

Итак, если ваши ресурсы находятся в src / my-resources

Project
|-- pom.xml
`-- src
    `-- my-resources

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

   ...
   <resources>
     <resource>
       <directory>src/my-resources</directory>
     </resource>
   </resources>
   ...

Кроме того, вы можете создать несколько каталогов, добавив несколько элементов:

   ...
   <resources>
     <resource>
       <directory>resource1</directory>
     </resource>
     <resource>
       <directory>resource2</directory>
     </resource>
     <resource>
       <directory>resource3</directory>
     </resource>
   </resources>
   ...
person Nishant Bhagat    schedule 06.11.2019
comment
Я добавил ресурс, но он по-прежнему не работает. Есть другой способ сделать это? У меня есть изображения на базовом пути к исходному каталогу. и даже можете увидеть main.png в / target / classes. Но почему-то Icon.class.getResource (path); не для меня. Путь здесь = /images/main.png - person Ashish K; 18.06.2020

Один или несколько из:

/gpjlibrarymanagementsystem/icons/icons8-minus-24.png
/gpjlibrarymanagementsystem/icons/icons8-maximize-button-20.png
/gpjlibrarymanagementsystem/icons/icons8-multiply-24.png

неверно (файл не существует), поэтому getResource возвращает null.

person George Z.    schedule 06.11.2019
comment
Вы можете увидеть это здесь: imgur.com/a/zJCl2WH Я импортировал все изображения и установил их из netbeans :) так как же это может быть не так? - person Nishant Bhagat; 06.11.2019

Имя каталога проекта (см. Ниже) - icon (в единственном числе), но в коде указано icons (во множественном числе).

введите здесь описание изображения

person Andrew Thompson    schedule 06.11.2019
comment
Нет, это на самом деле значки ... Netbeans не показывает последнее слово - person Nishant Bhagat; 06.11.2019
comment
Нет! И прекратите публиковать изображения следов стека. Вместо этого отредактируйте вопрос, вставьте всю трассировку стека, а затем используйте форматирование кода. (Используйте форматирование кода для кода и фрагментов кода, структурированных документов, таких как HTML / XML или ввода / вывода. Для этого выберите текст и нажмите кнопку {} в верхней части формы публикации / редактирования сообщения.) - person Andrew Thompson; 06.11.2019
comment
См. Также изменение моего ответа, который, несмотря на ваши заверения, мне кажется icon! - person Andrew Thompson; 06.11.2019
comment
Прочитав ваш комментарий, я трижды посмотрел имя пакета и его значок. Для вашей уверенности я вырезал изображение: imgur.com/a/SKUrmwJ - person Nishant Bhagat; 06.11.2019
comment
Это происходит только с проектами maven. У этого человека тоже было такое же исключение NullPointerException: mail-archives.apache.org/mod_mbox/netbeans-commit/201907.mbox/ - person Nishant Bhagat; 06.11.2019

Поместите изображения в папку с именем resources, путь должен быть: src / main / resources / image.jpg

Теперь в Netbeans нажмите «Очистить и построить проект».

Создайте метку и с помощью IDE поместите значок, для этого перейдите в свойства метки.

Как только это будет сделано, щелкните правой кнопкой мыши этикетку, выберите «Пользовательский код» и попробуйте поймать ту часть, где значок находится на этикетке.

У меня это сработало, и мне потребовался день, чтобы понять, как это сделать.

person Lesther Manuel    schedule 22.10.2020

У меня были эти изменения.

Я использовал пакеты ... пакет со значком Open.png был bz.usedPictures

button.setIcon(
  new javax.swing.ImageIcon(
    getClass().getResource("/bz/usedPictures/Open.png")
  )
);

Я переходил на maven.

Согласно Maven: https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html

src/main/resources: Application/Library resources

Затем я помещаю ЗНАЧОК в это место:

PROJECTNAME\src\main\resources\usedPictures\
--Open.png

Очистить и построить. Здесь вы можете проверить, где будет получен файл ....

PROJECTNAME\target\classes\usedPictures\
--Open.png

Теперь пример с использованием ICON:

button.setIcon(
    new javax.swing.ImageIcon(
        getClass().getClassLoader().getResource("usedPictures/Open.png")
    )
);
person joseluisbz    schedule 17.09.2020