2009-05-04 2 views
1

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

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

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

EDIT:

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

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

ответ

2

Вы можете использовать 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

Прежде всего.

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

package Etc;

???

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

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

Так

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

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

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

если нет.

0

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