Изображения не будут работать в файле .jar - PullRequest
2 голосов
/ 02 ноября 2009

Когда создается JAR приложения, изображения в приложении больше не отображаются. Пример нашего кода для загрузки изображений:

ImageIcon placeHolder = new ImageIcon("src\\Cards\\hidden.png");

Мы понятия не имеем, почему это происходит. Приложение работает как положено, если мы не сжимаем его в JAR; как JAR, изображения просто исчезают. Мы также попытались использовать URL вместо ImageIcons, но это просто приводит к тому, что программа вообще не запускается.

Есть идеи?

РЕДАКТИРОВАТЬ: Мы помещаем файлы изображений в наш JAR-файл по правильным путям, так что это не проблема.

Ответы [ 3 ]

7 голосов
/ 02 ноября 2009

Проверьте API для конструктора , который вы вызываете. Передаваемая вами строка является путем к файлу - когда ресурсы упакованы в JAR, в файловой системе, содержащей изображение, нет файла, поэтому вы больше не можете использовать этот конструктор.

Вместо этого вам нужно загрузить ресурсы из потока, используя загрузчик классов, и вытянуть их в байтовый массив:

byte[] buffer = new byte[IMAGE_MAX_SIZE];
InputStream imageStream = getClassLoader().getResourceAsStream("src\Cards\hidden.png");
imageStream.read(buffer, 0, IMAGE_MAX_SIZE);
ImageIcon placeHolder = new ImageIcon(buffer);

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

2 голосов
/ 02 ноября 2009

Вы должны загрузить ресурсы из classpath как таковые:

 InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("Cards/hidden.png")

Это, конечно, предполагает, что когда вы создаете JAR, вы фактически помещаете в него файлы изображений.

Существует также метод для получения ресурса в виде URL .

1 голос
/ 02 ноября 2009

Вопрос : Существует ли папка src в банке?

Совет : Вы можете открыть .jar с помощью любой программы распаковки, которая поддерживает ZIP, чтобы просмотреть ее содержимое.

Ответ : Если вы ссылаетесь на ресурс неправильно, вы должны сделать что-то вроде getClass().getClassLoader().getResource("Cards/hidden.png").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...