Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: jar и растровое изображение  (Прочитано 12828 раз)
0 Пользователей и 1 Гость смотрят эту тему.
axt
Гость
« : 18-04-2006 14:20 » 

Написал одно приложение в NetBeans 5.0.
Постоил jar-executable.

Но у меня никак не получалось сделать так, чтобы растровое изображение, положенное в jar-executable, читалось из него и мне не надо было писать в Readme “положите Gizmo.jpg и About.jpg в с:/temp, только тогда вы можете запустить Verwalter.jar”

Я вывожу растровое изображение на JLabel, так:

String pictPath = "c:/temp/Gizmo.jpg";
ImageIcon imageIcon = new ImageIcon(pictPath);
JLabel jlabPicture = new JLabel(imageIcon);

Ну а потом, если это вообще важно для этой темы, я кладу этот JLabel на JFrame и в конструкторе пишу:
.
.
.
JFrame jframe = new JFrame(“My Title”);
asoluteLayout(jframe, jlabel); /*мой метод, использующий null-Layout и setBounds(.....)*/
jframe.setDefaultCloseOperation(CONST);
jframe.setSize(x,y);
jframe.setVisible(true);
.
.
.

После, того, как нет никаких exception’ов, получаю jar-executable.
Когда запускаю его, он ищет эту картинку в pictPath, если не находит, то не показывает.

Я уже перепробовал множество вариантов клал в ту же папку, что и исходник и писал: new ImageIcon(“*.Gizmo.jpg”), и new ImageIcon(“/Gizmo.jpg”), и new ImageIcon(“*/Gizmo.jpg”), и new ImageIcon(“Verwalter.jar/Gizmo.jpg”) /*Verwalter.jar – это название моего jar-executable*/ не работает, и не выдаёт никаких еxception’oв, просто не показывает картинку и всё.

Подскажите, в чём ошибка.
Заранее спасибо.
Записан
Hoha
Гость
« Ответ #1 : 18-04-2006 15:00 » 

Картинки, распространяемые вместе с приложением надо доставать через механизм поиска ресурсов. Ресурс ищется в classpath приложения.

Например:

Код:
...
|
 --my
    |
     -- pckg
         |
          -- Main.class
         |
          -- images
              |
               -- myIcon.gif


Вытаскивается так:

Код:
URL iconURL = MyClass.class.getResource("images/myIcon.gif");

if (iconURL != null) {
     ImageIcon myIcon = new ImageIcon(iconURL);
}

Читать: JavaDoc для ImageIcon, особенно строчку
Цитата
For further information and examples of using image icons, see How to Use Icons in The Java Tutorial.
« Последнее редактирование: 18-04-2006 15:02 от Hoha » Записан
Vantuz-Subhuman
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 27-07-2010 20:33 » 

Прошу прощения за подъём старых тем.
Здравствуйте.
Возникла такая-же проблема, воспользовался предложенным методом. При:

Код:
URL myIconUrl = DisabledLabelTest.class.getResource("BV.jpg");
if(myIconUrl != null)
{
myIcon = new ImageIcon(myIconUrl);
}
URL myDisIconUrl = DisabledLabelTest.class.getResource("BV_dis.jpg");
if(myDisIconUrl != null)
{
myDisIcon = new ImageIcon(myDisIconUrl);
}

и картинках лежащих в одной папке с .class файлами, всё работает. JAR запускается и видит картинки.
Но если, в попытке организовать JAR получше, картинки перенесены в другое место и адреса их поиска соответственно изменены, программа их не видит. Например:

Код:
URL myIconUrl = DisabledLabelTest.class.getResource("..\\img\\BV.jpg");
if(myIconUrl != null)
{
myIcon = new ImageIcon(myIconUrl);
}
URL myDisIconUrl = DisabledLabelTest.class.getResource("..\\img\\BV_dis.jpg");
if(myDisIconUrl != null)
{
myDisIcon = new ImageIcon(myDisIconUrl);
}

содержимое JAR-файла:
META-INF/MANIFEST.MF
.classpath
main/DisabledLabelTest$1.class
main/DisabledLabelTest$2.class
main/DisabledLabelTest$3.class
main/DisabledLabelTest.class
main/DisabledLabelTest.java
.project
img/
img/BV.jpg
img/BV_dis.jpg


Так ничего не работает. Но, если распаковать содержимое JAR-файла в какую-нибудь директорию и запускать консольно, то всё работает.

Ничего не понимаю (
Может кто-нибудь в курсе, как можно решить проблему?
« Последнее редактирование: 27-07-2010 20:43 от Vantuz-Subhuman » Записан

«You should never underestimate the predictability of stupidity»,
«Never attribute to malice that which can be adequately explained by stupidity»
Vantuz-Subhuman
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 28-07-2010 07:46 » 

Нашёл решение.
Пути в архиве строятся относительно самого архива, а не класса.
Если класс находится в папке 'main', а изображения в 'img' путь надо указывать так:

Код:
URL myIconUrl = DisabledLabelTest.class.getResource("/img/BV.jpg");
if(myIconUrl != null)
{
myIcon = new ImageIcon(myIconUrl);
}
URL myDisIconUrl = DisabledLabelTest.class.getResource("/img/BV_dis.jpg");
if(myDisIconUrl != null)
{
myDisIcon = new ImageIcon(myDisIconUrl);
}

Так всё работает.
Спасибо Skipy, с форума javatalks.
Записан

«You should never underestimate the predictability of stupidity»,
«Never attribute to malice that which can be adequately explained by stupidity»
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines