Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Хранение иконок на диске


Автор: agR 2.10.2006, 17:58
Если у меня изображение берется по такому принципу:
Код

Icon openIcon = new ImageIcon(DrawingTest.class.getResource("images/open.gif"));

, то где тогда в реале должна находиться папка images, чтобы приложение смогло найти картинки????


Автор: Slavca 2.10.2006, 18:46
JavaDoc для указанного метода:
Код

Finds a resource with a given name. The rules for searching resources associated with a given class are
implemented by the defining [B]class loader of the class[/B]. This method delegates to this object's class
loader. If this object was loaded by the bootstrap class loader, the method delegates to
ClassLoader.getSystemResource(java.lang.String).

т.е. загрузкой ресурса занимается тот-же ClassLoader, который загружал класс. Читаем дальше:
Код

 Before delegation, an absolute resource name is constructed from the given resource name using this algorithm:

    * If the name begins with a '/' ('\u002f'), then the absolute name of the resource is the portion of the name following the '/'.
    * Otherwise, the absolute name is of the following form:

             modified_package_name/name
           

      Where the modified_package_name is the package name of this object with '/' substituted for '.' ('\u002e'). 

т.к. символ '/' в начале не указан, то путь считается относительным - относительно пакета, в котором располагается класс.
Пробуем:
Код

import javax.swing.*;

public class Main {
    public static void main(String[] args) {
        Icon openIcon = new ImageIcon(Main.class.getResource("images/open.gif"));

        if (openIcon == null) {
            return;
        }
        JFrame frame = new JFrame("df");
        frame.getContentPane().add(new JLabel(openIcon));
        frame.setSize(openIcon.getIconWidth()*2, openIcon.getIconHeight()*2);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

Примечание: пакет не указан.
Теперь в папке images расположим файлик open.gif. И вот нам щастя.
Теперь пусть Main располагается в пакете ru.test:
Код

package ru.test;

import javax.swing.*;

public class Main {
    public static void main(String[] args) {
        Icon openIcon = new ImageIcon(Main.class.getResource("images/open2.gif"));
        ...
}

и картинку в ru.test.images -  вот нам щастя 2  smile 
В прикрепленном файлике - проект Idea с примером.

Автор: agR 2.10.2006, 20:52
Slavca, спасибо.
Разжевал, в рот положил, еще и за кадык подергал smile
Сейчас буду пробовать.

Автор: agR 2.10.2006, 21:53
Хммм.... работает, только есть одно "но".
Если раньше я создавал jar  файл и он у меня запускался,
то теперь с этим проблема.... smile
Как исправить?

Автор: LSD 2.10.2006, 21:54
Цитата(agR @  2.10.2006,  22:53 Найти цитируемый пост)
Если раньше я создавал jar  файл и он у меня запускался,то теперь с этим проблема.... 

С чем с этим? Создаваемый jar перестал запускаться?

Автор: agR 2.10.2006, 21:59
ага.... 
из JBuildera  все ок,
а сам File.jar не хочет

Автор: LSD 2.10.2006, 22:02
Манифест выложи сюда, заодно глянь в свойствах jar файла, какой создается тип архива и указан ли main class.

Автор: agR 2.10.2006, 22:08
Цитата
LSD
Манифест выложи сюда, заодно глянь в свойствах jar файла, какой создается тип архива и указан ли main class.


Дело в том, что раньше я указывал явно путь к картинкам
Код

Icon newIcon = new ImageIcon(
                "D:/Install/Programming/Java/Icons/Icon/Marseilles/GIFs/documents_16.gif");


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

Автор: powerOn 2.10.2006, 22:09
И еще, неплохо бы посмотреть каким образом происходит запуск jar файла. (так, на всякий случай  smile )

Добавлено @ 22:14 
Цитата(agR @  2.10.2006,  23:08 Найти цитируемый пост)
я хочу как-нить сделать так, чтобы запуская jar-файл на другом компе картинки тоже отображались, то бишь упаковать их в этот jar-файл. 


ну это можно с помощью архиватора сделать: jar -  это архив, его любой zip архиватор должен раскрыть. Или с помощью утилиты jar, которая входит в состав JDK.


Автор: agR 2.10.2006, 22:15
Цитата
powerOn
И еще, неплохо бы посмотреть каким образом происходит запуск jar файла. (так, на всякий случай smile )

Обычно, руками  smile. Другие jar'ы запускались по нажатию Enter или после 2-йного нажатия мышью.
И этот, до "нововведений" тоже запускался. В MANIFEST'е все пучком, т.е. норм, main class тот что нужно. 

Автор: LSD 2.10.2006, 22:21
Цитата(agR @  2.10.2006,  23:08 Найти цитируемый пост)
поэтому я хочу как-нить сделать так, чтобы запуская jar-файл на другом компе картинки тоже отображались, то бишь упаковать их в этот jar-файл. Ведь это можно, вопрос как?

Создаешь в каталоге с исходниками папку images и кидаешь туда свои картинки. И проверь в настройках архива, что он ресурсы тоже упаковывает. А как грузить ресурсы из jar Slavca тебе уже показал.

Добавлено @ 22:22 
Цитата(agR @  2.10.2006,  23:15 Найти цитируемый пост)
Другие jar'ы запускались по нажатию Enter или после 2-йного нажатия мышью.

Запусти его руками из консоли (java -jar ...) и посмотри какие ошибки он тебе выдаст.

Автор: agR 2.10.2006, 22:25
Спасибо всем.
Пошло, как дети в школу smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)