2015-08-31 2 views
4

В принципе, я хочу включить в файл JAR основной значок JFrame, поэтому его не нужно загружать из внешнего местоположения.Путь для извлечения ресурсов с помощью ClassLoader

Для этого я искал ресурсную систему Java. Что я сделал с Eclipse:

  1. Я создал новую папку с именем "Рес":

  2. Я скопированные файлы внутри него с помощью проводника Windows':

  3. Я сделал эту папку исходной папкой :

  4. Я написал этот код:

    URL url = ClassLoader.getSystemResource("/res/icona20.ico"); 
    

Но url является null. Что я сделал не так?

+1

Избавиться от '/ res' в пути –

+1

Когда вы добавляете папку в путь сборки, она не является частью пути, а все содержимое помещается в корень пути к классам –

+2

См. [Здесь] (http://stackoverflow.com/a/25636097/2587435) –

ответ

3

Как уже упоминалось вы, кажется, добавили res как исходную папку, так что это корень, а не назвать, как src.

URL url = ClassLoader.getSystemResource("icona20.ico"); 

Класс погрузчики использовать абсолютный (чувствительный к регистру) путь, без явных ведущих косых черт /....

Относительные пути с обязательным слэш для абсолютных путей:

URL url = Xyz.class.getResource("/icona20.ico"); 

И вы могли бы предпочесть .png вместо .ico как последний формат не является стандартом в Java SE.

(. О общих практиках) Инструмент сборки maven использует в качестве хорошего стандарта следующих исходных папок:

/src/main/java/ 
/src/main/resources/ 
/src/test/java/ 
/src/test/resources/ 

Вашего использование res напоминает MS Visual Studio;).

+0

Да, у меня есть фон [tag: vb.net]. Нет статического метода, например 'ClassLoader.getResource (String)'. –

+0

Вы правы; должен был быть 'getSystemResource'. Исправленный. Думаю, Андрес тоже исправил, и тогда его ответ должен быть адекватным и первым. –

+0

В качестве заметки вы не можете использовать .ico изображения для значков 'JFrame'; вы можете использовать формат .png. Спасибо за указание. –

3

Классный загрузчик получит ресурсы, начиная с каждой исходной папки, добавленной в путь к классам. Таким образом, URL должен быть следующим:

URL url = ClassLoader.getSystemResource("icona20.ico"); 
Смежные вопросы