Как правильно получить изображение из папки «Ресурсы» в NetBeans - PullRequest
30 голосов
/ 27 июля 2011

У меня есть проект Java в NetBeans 7.0.

Я хочу динамически добавить какое-либо изображение в метку.Изображение будет отличаться в зависимости от состояния программы.

Я поместил одно из таких изображений, «fill.jpg», в папку «Resources» моего проекта.

Я хочу достичьэтот файл правильно (не по абсолютному или относительному пути, потому что это вызовет проблемы при сборке файла JAR).

Итак, я нашел этот метод:

ImageIcon fillingIcon = new ImageIcon(getClass().getClassLoader().getResource("filling.jpg"));
labelFontFilling.setIcon(fillingIcon);

Это дает мне Java.lang.NullPointerException.Но я уверен, что это изображение есть, потому что я могу назначить изображение для метки из меню свойств NetBeans для этой метки (но я не хочу этого, я хочу добавить изображение с помощью кода Java).

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

Ответы [ 4 ]

45 голосов
/ 26 июля 2012

Это была боль при использовании IDE NetBeans 7.2.

  1. Вам нужно помнить, что Netbeans очищает папку Build при каждой перестройке, поэтому
  2. Добавить папку ресурсов в папку src :

    • (проект)
      • ЦСИ
        • папка пакета проекта ( содержит файлы .java )
        • ресурсы ( любое имя, которое вы хотите )
        • изображений ( необязательные подпапки )
  3. После очистки / сборки эта структура распространяется в папку Build:

    • (проект)
      • построить
        • классы
          • папка пакета проекта ( содержит сгенерированные файлы .class )
          • ресурсов ( ваших ресурсов )
          • изображений ( ваши дополнительные подпапки )

Для доступа к ресурсам:

dlabel = new JLabel(new ImageIcon(getClass().getClassLoader().getResource("resources/images/logo.png")));

и

if (common.readFile(getClass().getResourceAsStream("/resources/allwise.ini"), buf).equals("OK")) {

работал на меня. Обратите внимание, что в одном случае есть ведущий «/», а в другом - нет. Таким образом, корень пути к ресурсам - это папка " classes " в папке сборки.

Двойной щелчок по исполняемому файлу JAR в папке dist. Путь к ресурсам все еще работает.

22 голосов
/ 11 августа 2015

У меня немного другой подход, который может быть полезен / более выгоден для некоторых.

В папке вашего основного проекта создайте папку ресурсов.Структура вашей папки должна выглядеть примерно так:

  • Папка проекта
    • build
    • dist
    • lib
    • nbproject
    • resources
    • src

Перейдите в свойства вашего проекта.Это можно сделать, щелкнув правой кнопкой мыши свой проект во вкладке «Проекты» и выбрав «Свойства» в раскрывающемся меню.

В разделе категорий слева выберите «Источники».

В папках исходного пакетас правой стороны добавьте папку ресурсов с помощью кнопки «Добавить папку».После того, как вы нажмете ОК, вы увидите папку ресурсов в вашем проекте.

enter image description here

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

MyClass.class.getResource("/main.jpg");

Если вам нужно создать пакет с именем Images в папке ресурсов, вы можете получить ресурс следующим образом:

MyClass.class.getResource("/Images/main.jpg");
20 голосов
/ 01 августа 2011

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

    String pathToImageSortBy = "resources/testDataIcons/filling.png";
    ImageIcon SortByIcon = new ImageIcon(getClass().getClassLoader().getResource(pathToImageSortBy));

Но правильным способом было использование имени моего проекта в пути к ресурсу

String pathToImageSortBy = "nameOfProject/resources/testDataIcons/filling.png";
ImageIcon SortByIcon = new ImageIcon(getClass().getClassLoader().getResource(pathToImageSortBy));
0 голосов
/ 29 июня 2018

Для меня это работало так, как будто у меня были изображения в папке icons в src, и я написал следующий код:

new ImageIcon(getClass().getResource("/icons/rsz_measurment_01.png"));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...