Изображения не отображаются в банке, но отображаются в компиляторе? - PullRequest
3 голосов
/ 23 февраля 2011

Я знаю, я знаю, об этом уже спрашивали.Но каждый ресурс, на который я смотрел, использует IconImages, а у меня просто простые изображения.

Есть ли другое решение?Пожалуйста, помогите, потому что я застрял, исследуя и пытаясь понять это в течение нескольких дней без какого-либо прогресса.

Image Floor = Toolkit.getDefaultToolkit().getImage("Floor.PNG");

РЕДАКТИРОВАТЬ: Если бы я должен был убедиться, что банка не сжимается, и я создал отдельный каталог в банке для изображений и указал правильный путь к файлу, сработал бы этот код?

Ответы [ 6 ]

3 голосов
/ 23 февраля 2011

Toolkit # getImage (String s) ищет файл, и, скорее всего, ваше изображение находится в банке и теперь является ресурсом, а не файлом.Обратите внимание на использование ресурсов для этого.

Обратите внимание, что ImageIO.read (...) может принимать параметр InputStream, который есть в классе Class, getResourceAsStream (...), который может поместить ресурс в поток, которыйImageIO умеет читать.Попробуйте.

Кроме того, вы получаете какие-либо сообщения об ошибках, когда пытаетесь что-то делать?

1 голос
/ 04 июля 2012

Проверьте расширение файлов.У меня была эта проблема, потому что расширение было «PNG», когда я изменил его на «png», все было в порядке.

1 голос
/ 23 февраля 2011

Вызов getImage ищет в рабочем каталоге файловой системы, а не в файле Jar.Вот почему файл JAR успешно загружает изображения, когда они находятся в одном каталоге вне файла JAR.Если изображения объединены в jar-файл, они больше не являются файлами файловой системы, к которым нужно обращаться, а скорее являются файловыми ресурсами Jar.Есть другой способ загрузить их, но извините, я не знаю, как это происходит на макушке.

1 голос
/ 23 февраля 2011

Убедитесь, что вы знаете, какой у вас текущий каталог и как он соотносится с положением файлов в вашем банке.

Вот как бы я справился с этим.

1) Require there to be a file called "images.txt" in the directory with your jar (or bundle it into the jar.)
2) Make a file called "images.txt" with a format like `FLOOR:C:\\images\\floor.png`
3) Load this file into memory on load.
4) Load your images based on the entries in the file

Это даст вам преимущество в изменении ваших изображений без изменения кода, если он определен вне jar:)

Это не загрузка, потому что вы не указываете путь к изображениям в объявлении. Он ожидает, что изображения будут находиться там, где находится банка (обратите внимание, что там нет каталогов)

Вам необходимо выгрузить определение имен файлов в файл или, по крайней мере, гарантировать относительное положение файлов.

Другой хороший вариант - поместить изображения в саму банку, скажем, в каталог img, и сослаться на них там. Но тогда изменения в изображениях требуют новой фляги, которая может быть нежелательна для целей разработки.

0 голосов
/ 23 февраля 2011

И я знаю, что для ImageIcon вы используете: новый javax.swing.ImageIcon (getClass (). GetResource ("myimage.jpeg"), но я не нашел ничего похожего для простого Image.

Вы действительно должны начать читать JavaDocs. В противном случае вы «кодируете по волшебству». Что обычно не работает.

URL urlToImage = getClass().getResource("myimage.jpeg");
// If you need to support Java 1.3
Image image = Toolkit.getDefaultToolKit().getImage(urlToImage);
// If your users have dragged their JRE into this millennium
BufferedImage bufferedImage = ImageIO.read(urlToImage);
0 голосов
/ 23 февраля 2011

Вы не можете ожидать, что файл JAR будет магическим образом знать, где находятся ваши изображения. Если вы поместите JAR-файл один на рабочий стол, он будет искать файлы на рабочем столе! Код

getImage("Floor.png")

ищет в текущем каталоге JAR (или исходном проекте) по умолчанию, и вы ожидаете, что если JAR находится в том же каталоге, он будет работать. Если JAR находится на рабочем столе, как он узнает, где находится Floor.png? Конечно, вы можете указать жестко заданный путь

getImage("C:\Some Folder Path\Floor.png")

но тогда Floor.png должен быть в C: \ Some Folder Path \, чтобы JAR работал правильно.

Похоже, что вы действительно хотите сделать, это сохранить изображения в файле JAR (который действует как ZIP-файл). Учебник по этому вопросу находится здесь:

http://download.oracle.com/javase/tutorial/uiswing/components/icon.html#getresource

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