Ошибка ImageIO.read getResource

Я испытываю странную проблему. Вот мой фрагмент кода:

...
public xProgressBar(xTheme theme) {
    try {
      this.update = ImageIO.read(xTheme.class.getResource("/images/" + xThemeSettings.PROGRESSBAR_IMAGES[0]));
    }
...

И когда я запускаю программу, я получаю следующую ошибку:

Exception in thread "main" java.lang.IllegalArgumentException: input == null!
at javax.imageio.ImageIO.read(Unknown Source)

Вот файловая структура:

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

Как видите, папка res находится в корне с папкой src. Я прочитал много подобных вопросов, но ничего не помогло.


person Andrii H.    schedule 27.05.2017    source источник
comment
Почему вы считаете, что xTheme.class.getResource() должен найти ресурсы под res/? Что заставляет вас думать, что это может сработать?   -  person JB Nizet    schedule 27.05.2017
comment
Ну, я также пытался добавить res к пути, но это не работает..   -  person Andrii H.    schedule 27.05.2017
comment
разрешение/изображения, /раз/изображения, ./рез/изображения. Ничего из этого не работает.   -  person Andrii H.    schedule 27.05.2017
comment
Вы не отвечаете на мой вопрос. Вы используете метод с именем getResource() для типа java.lang.Class. Почему бы вам не прочитать его javadoc, чтобы узнать, что он делает и как он работает, вместо того, чтобы пробовать случайные вещи? Подсказка: он делегирует ClassLoader загрузку ресурсов. ClassLoader волшебным образом не загружает ресурсы из произвольных мест. Он находит ресурсы из банок и каталогов, которые находятся в пути к классам среды выполнения.   -  person JB Nizet    schedule 27.05.2017


Ответы (2)


Чтобы getResource мог найти файл, соответствующая папка (в данном случае res) должна находиться в папке classpath. Если его нет в пути к классам, InputStream, возвращаемый getResource, всегда будет null.

Вот как добавить папки в classpath.

person Darshan Mehta    schedule 27.05.2017

Ваш вызов .getResource("/images/...") не удался, и он вернул null. Следовательно, вы звонили ImageIO.read(null) и получили IllegalArgumentException.

Чтобы ваши ресурсы, расположенные в папке res, могли быть найдены ...getResource(...), вам нужно сделать res исходной папкой вашего проекта Eclipse. Для этого: Щелкните правой кнопкой мыши папку res, во всплывающем меню выберите Build path -> Use as Source Folder.

скриншот

Вы заметите тогда

  • res появится с тем же значком, что и ваша папка src.
  • res будет добавлено в файл .classpath вашего проекта.
person Thomas Fritsch    schedule 27.05.2017