Проблема с путями в java jar - PullRequest
1 голос
/ 04 мая 2009

У меня есть папка Etc, в которой есть изображение, которое я хочу использовать в другом файле в той же папке, Example.java. Итак, у меня есть Etc \ image.png и Etc \ Example.java. Я пытался использовать «Etc / image.png» в качестве пути к изображению, но это не сработало. Как мне поступить об этом?

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

Мои основные классы .java для записи находятся в пакете с именем Main.

EDIT:

Я использовал это:

ClassLoader.getSystemClassLoader () getResource ( "Etc \ image.png");.

Ответы [ 3 ]

2 голосов
/ 04 мая 2009

Вы можете использовать Class.getResource(), который использует загрузчик классов для получения URL-адреса ресурса. Например:

import java.net.URL;
import javax.swing.ImageIcon;

public class Example {

    public ImageIcon getImage() {
        URL url = Example.class.getResource( "image.png" );
        if( url != null ) {
            return new ImageIcon( url );
        }
        return null; // TODO: Better error handling
    }

}

Важной частью является Example.class.getResource( "image.png" ) - путь к изображению указывается относительно названного класса; в этом случае он находится в том же каталоге, что и файл класса. Вы также можете использовать эту строку в любом другом классе, оставив ссылку на Example.class без изменений.

0 голосов
/ 04 мая 2009

Чтобы это работало, у вас должен быть каталог, где Etc находится в пути к классам. Если это внутри банки, я не помню, если. работает как путь к классам, если нет, добавьте Etc к пути к классам и создайте ссылку на изображение без пути к классам или поместите Etc в подкаталог. и поместите этот подкаталог в путь к классу.

0 голосов
/ 04 мая 2009

обо всем по порядку.

Является ли Etc пакетом? Другими словами, в верхней части вашего примера файла у вас есть

пакет Etc;

???

Обычно имена пакетов в нижнем регистре, поэтому я спрашиваю.

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

Итак

URL url = Example.class.getResource ("/ Etc / image.png");

если Etc является пакетом, в противном случае

URL url = Example.class.getResource ("/ image.png");

, если это не так.

...