2015-04-26 3 views
5

Я пытаюсь получить доступ к файлу в моем проекте. Но метод getResource возвращает null.Почему getResource возвращает null

Это как мой проект выглядит следующим образом: enter image description here

Thread.currentThread().getContextClassLoader().getResource("assets/xxx.png"); //returns null 

И как папка проекта в затмение рабочее пространство выглядит следующим образом:

enter image description here

Почему? Я хочу получить доступ к файлам в папке с моими активами?

Редактировать Я создал файл банку, и это содержание кувшина:

enter image description here

решаемые

Прежде всего, я много графических файлов, так Я хочу организовать их все в папке. Я поместил папку с ресурсами в каталог src и, наконец, смог получить доступ к файлам.

this.getClass().getClassLoader().getResource("assets/xxx.png"); 

enter image description here

+2

Вы не можете получить доступ к папке assert, если иначе вы не связали ее в своей банке. Можете ли вы извлечь банку и показать содержимое, чтобы мы могли вам помочь. – Eranda

+0

Является ли папка с ресурсами определенной исходной папкой? – AlexR

+0

@AlexR yes, определенный как исходная папка – amone

ответ

2

Есть много способов, чтобы добавить ресурс в файл банка, вы можете поместить его в И, добавить в качестве ресурса, если вы используете Maven, муравей и т.д. ... Если вы в состоянии связать всеми каталог, то вы должны иметь возможность использовать свой оригинальный код. С текущей структурой вы можете использовать следующий фрагмент кода.

Thread.currentThread().getContextClassLoader().getResource("/xxx.png"). 
+0

Если я просто добавлю все файлы в каталог bin, к которому я могу получить доступ. Но в моем проекте много файлов, и я хочу организовать их в каталоге. Поэтому я хочу поместить все файлы в папку и получить к ним доступ из этого каталога. – amone

+0

Поместите весь каталог утверждений в папку src (source). Eclipse свяжет это для вас. – Eranda

+0

@Eranda - Ваш код, похоже, имеет относительный путь. Что это относительно и как я могу узнать корень? – testerjoe2

1

Попробуйте использовать / префиксов.

Thread.currentThread().getContextClassLoader().getResourceAsStream("/xxx.png")

+1

Я уже пробовал. не работает. – amone

+0

в соответствии с вашей структурой 'jar', я могу видеть этот файл изображения в корне. Я обновил свой ответ, попробую еще раз. Спасибо –

+0

он не работает с банкой. – amone

0

Есть ли причина, по которой вы используете загрузчик классов текущего класса? Что-то наподобие this.getClass().getClassLoader().getResource("/xxx.png") должно быть более надежным.

0

Используйте следующий код, он должен работать.

YOUR_CLASS_HERE.class.getClass().getResource("/xxx.png");

например, Signin.class.getClass().getResource("/xxx.png");

0

Любой подход будет работать. его просто проблема Filepath.

  • Ваш Jar структура показывает, нет "актив" Папка
    xxx.png файл не находится непосредственно в Jar File.

Попробуйте удалить «активы» из-под строки кода.

Thread.currentThread().getContextClassLoader().getResource("assets/xxx.png"); //returns null 
  • Кроме того, если вы хотите использовать «активы» папку в Уре классов, пожалуйста, убедитесь, что ваша баночка содержит папку «активов».