it-roy-ru.com

Как правильно получить изображение из папки "Ресурсы" в NetBeans

У меня есть проект 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).

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

29
ShockwaveNN

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

    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));
20
ShockwaveNN

Это было больно, используя netBeans IDE 7.2.

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

    • (Проект)
      • 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. Путь к ресурсам все еще работает.

45
Jamie

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

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

  • Папка проекта
    • строить
    • расстояние
    • lib
    • nbproject
    • ресурсы
    • цСИ

Зайдите в свойства вашего проекта. Вы можете сделать это, щелкнув правой кнопкой мыши свой проект в окне вкладки Projects и выбрав Properties в выпадающем меню.

Под категориями слева выберите Источники.

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

 enter image description here

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

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

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

MyClass.class.getResource("/Images/main.jpg");
20
Matthew Pautzke

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

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

0
SNB