2013-08-16 8 views
0

(Прежде всего, мне очень жаль Если есть как миллион вопросов, как это. Я пробовал все, что могу, и это сводит меня с ума!)Ошибка при получении изображения из папки ресурсов

Я m пытался иметь значок для JButton, но я продолжаю получать IllegalArgumentException, вызванный ImageIO.

Вот что у меня есть:

//Other UI elements^
    JButton X = new JButton("Clear");   
    //com.oliveira.ux is the package name 
    Image img = ImageIO.read(getClass().getResource("/com.oliveira.ux/resource/gtk-clear.png")); 
    Icon clear = new ImageIcon(img); 
    //More UI elements 

Икона находится под SRC/имя пакета/ресурсов /. (Я использую затмение). Я попытался изменить местоположение в коде выше (тот, который я написал здесь, был последним, который я пробовал), но все, что я получаю, является исключением IllegalArgumentException, когда я запускаю .jar. Какие-либо предложения?

Большое спасибо заранее

Вот полное сообщение об ошибке:

Caused by: java.lang.IllegalArgumentException: input == null! 
    at javax.imageio.ImageIO.read(Unknown Source) 
    at com.oliveira.ux.Main.<init>(Main.java:146) 
    at com.oliveira.ux.Main.main(Main.java:75) 
    ... 5 more 

Это указывает на часть ImageIO в коде, я написал выше.

+0

Пожалуйста, разместите полную трассировку стека вместе с разделами «вызвано» и укажите инструкцию в своем коде, который бросает исключение. –

+1

'getClass(). GetResource()' ищет файл относительно местоположения текущего класса, поэтому, если ваш класс уже находится в пакете com.oliveira.ux, вам нужно передать его '' resource/gtk- clear.png "'. В стороне, пакеты являются папками, поэтому com должен быть папкой, oliveira должна быть подпапкой и так далее; поэтому вы бы сделали что-то вроде com/oliveira/blah/blah. – sgbj

+1

Предполагается, что это 'com.oliveira.ux' является веб-ссылкой или ссылкой на путь пакета. Если это путь, его не следует разделять '.', но'/' – MadProgrammer

ответ

3

Путь, кажется, не так ...

Image img = ImageIO.read(getClass().getResource("/com.oliveira.ux/resource/gtk-clear.png")); 

getResource не ожидает имя пакета, но «путь» к ресурсу из контекста пути класса (поэтому путь добавляется к элементам пути класса)

Что-то вроде ...

Image img = ImageIO.read(getClass().getResource("/com/oliveira/ux/resource/gtk-clear.png")); 

Если дать лучший результат