Java ImageUtil.loadImageResource — не удалось загрузить изображение

Я пытаюсь загрузить изображение из каталога моего проекта в ресурс BufferedImage, но получаю сообщение об ошибке, в котором говорится, что он не может загрузить изображение. Вот строка с ошибкой:

final BufferedImage plusMinusIcon = ImageUtil.loadImageResource(CalculatorProPlugin.class, "plus_minus_icon.png");

И вот ошибка, которую я получаю при попытке сборки:

net.runelite.client.util.ImageUtil - Failed to load image from class: 
...plugins.calculatorpro.CalculatorProPlugin path: 
...plugins.calculatorpro/plus_minus_icon.png

Изображение сохраняется в каталоге проектов, и если я скопирую путь к "plus_minus_icon.png" из каталога, я получу "...plugins.calculatorpro\plus_minus_icon.png", так что это соответствует тому, что я вставил в код

РАБОЧИЙ ОТВЕТ: Используя приведенные ниже предложения Frakcool, он помог мне создать рабочее решение:

InputStream inputStream = CalculatorProPlugin.class.getResourceAsStream("/plus_minus_icon.png");
BufferedImage plusMinusIcon = null;
plusMinusIcon = ImageIO.read(inputStream);

С моими значками, хранящимися в папке ресурсов в каталоге проекта:

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вместо этого используйте встроенный ресурс:

InputStream inputStream = this.getClass().getResourceAsStream("plus_minus_icon.png");

Затем преобразуйте входной поток, как показано в этом ответе:

BufferedImage plusMinusIcon = ImageIO.read(inputStream);

Я ввел ваш код, но после запуска "inputStream == null" возвращает true

Ваше изображение должно находиться в папке resources, как показано в учебнике Как использовать значки , также см. этот ответ для получения дополнительной информации, и вы также можете обратиться к этому руководству для объяснения, почему он должен быть в папке resources.

Когда я System.out.println(inputStream) получаю следующее:

java.io.BufferedInputStream@57829d67

Если его нет в папке ресурсов, я получаю ту же ошибку, что и вы

Запускаемый пример:

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;

public class ImageLoader {
    public static void main(String[] args) {
        ImageLoader imageLoader = new ImageLoader();
        imageLoader.loadResource();
    }

    private void loadResource() {
        InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("plus_minus_icon.png");

        System.out.println(inputStream);

        try {
            BufferedImage plusMinusIcon = ImageIO.read(inputStream);

            System.out.println(plusMinusIcon);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Я ввел ваш код, но после запуска "inputStream == null" возвращает true

TravelKidKurty 20.04.2023 20:05

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

Frakcool 20.04.2023 20:09

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

TravelKidKurty 20.04.2023 21:19

@TravelKidKurty Если вы используете IntelliJ, то это может пригодиться для создания папки ресурсов.

Frakcool 20.04.2023 22:10

И кстати, если вы отвечаете отвечающему на его ответ, они немедленно получают уведомление, если вы отвечаете кому-то еще, тогда вы хотите пометить их. То же самое происходит, когда вы комментируете вопрос :)

Frakcool 20.04.2023 22:11

Полезно знать, ха-ха, спасибо! Также спасибо за ссылку на папку с ресурсами IntelliJ - это было очень полезно! Вчера меня отстранили от проекта, поэтому я еще не закончил реализацию всего, что вы прислали, но буду информировать вас по ходу (может быть, сегодня или не раньше следующей недели)

TravelKidKurty 21.04.2023 21:00

Я все еще получаю "null", когда печатаю inputStream... Я заметил, что во всех присланных вами примерах, которые я читал, все используют this.getClass() или некоторые его разновидности. Поскольку мой код находится в статическом контексте, IntelliJ не позволяет мне его использовать. Вместо этого я использую CalculatorProPlugin.class. Будет ли это делать что-то отличное от функции getClass()? Кроме этого, я не знаю, чем я, возможно, отличаюсь от любого из примеров, на которые я смотрел и пробовал.

TravelKidKurty 21.04.2023 21:59

(также все мои файлы .png теперь находятся в папке ресурсов в папке калькулятора pro) - я мог бы обновить OP новыми скриншотами кода и файловой структуры, если это поможет?

TravelKidKurty 21.04.2023 22:06

@TravelKidKurty это помогло бы, но не скриншоты кода, а код в виде текста в формате кода. Мне любопытно, о чем вы говорите в статическом контексте, вы должны избегать этого, насколько это возможно. Я включил пример, который создает экземпляр (и это позволяет вам использовать this, и он больше не находится в статическом контексте, так как теперь у вас есть экземпляр)

Frakcool 21.04.2023 22:38

Я наконец-то заработал как раз перед тем, как вы опубликовали свое последнее редактирование! Я добавил функцию getClassLoader(), и бум! После дальнейшего прочтения вашей ссылки, помеченной как «этот ответ» (я не знаю, как опубликовать гиперссылку в комментариях), я обнаружил, что также могу заставить ее работать без функции getClassLoader(), если я просто добавлю «/» к строка имени файла ("/plus_minus_icon.png") - клянусь, я уже пробовал это в более ранней попытке, но, возможно, у меня была неправильная какая-то другая часть функции

TravelKidKurty 21.04.2023 22:58

@TravelKidKurty, вы можете опубликовать это [The text you want to post](The url it should point to)

Frakcool 21.04.2023 23:01
Это ссылка, которую я имел в виду, которую вы разместили выше. Я обновил OP, чтобы показать мой окончательный рабочий код и скриншот каталога, который вы помогли мне создать. Большое спасибо!!
TravelKidKurty 21.04.2023 23:06

Другие вопросы по теме

Изображение, загруженное на ввод динамической формы, дублируется в других вводах
Как экспортировать это очень большое изображение в Google Earth Engine?
Получение ошибок рендеринга изображения при отправке его через код C с использованием функций fread и send через сокет tcp в ответе http
Некоторые изображения показывают розовую полосу сбоку на некоторых устройствах Android в Shopify. Как мне это удалить?
Как расположить мои h1(меня зовут..) и <p>( A ср...) рядом с моим изображением, справа от изображения
Вулкан, загружающий текстуру в 8-битном формате, при рендеринге белый
Получить количество пикселей в кластерах одного цвета на изображении
Как определить лучший цвет фона для div, содержащего изображение?
Сохранение файла webp с помощью System.Drawing.Imaging создает файл большого размера или кодировщик не существует
Загрузка кубических изображений из png