2013-05-20 3 views
0

Я пытаюсь получить доступ к изображению, расположенному внутри бегущей банки.Получение пути к файлу внутри Jar

Вот мой код:

Image image = Toolkit.getDefaultToolkit().getImage(
      getClass().getResource("/res/sprites/")); 

Код выше работает абсолютно нормально.

Проблема, с которой я сталкиваюсь, заключается в преобразовании ее в читаемую строку, которая будет использоваться объектом BufferedImage.

Вот мой код: (pathRelativeToThis это строка)

Image path = Toolkit.getDefaultToolkit().getImage(
      getClass().getResource("/res/sprites/" + pathRelativeToThis)); 
    String image = "file://" + path.toString(); 

    URL url = new URL(image); 
    BufferedImage img = ImageIO.read(url); 

Это не работает и дает javax.imageio.IIOException: Can't get input stream from URL! как ошибка.

Каков правильный способ сделать это?

+0

'Class.getResource()' возвращает URL. 'ImageIO.read (URL)' принимает URL-адреса. Почему вы хотите конвертировать его в строку «String» между ними? –

ответ

2

Вы можете сделать это так и работать с потоком непосредственно:

InputStream is = getClass().getResourceAsStream("/res/sprites/" + pathRelativeToThis); 
BufferedImage img = ImageIO.read(is); 
is.close(); 

Также вы пытались передать URL ресурса ImageIO напрямую?

URL url = getClass().getResource("/res/sprites/" + pathRelativeToThis) 
BufferedImage img = ImageIO.read(url); 
+0

Вторая строка ссылается на url - можно ли использовать поток вместо этого? Думали, что может потребоваться дополнительный трюк? – djna

+0

нет, только моя копия-опечатка, спасибо – hoaz

+0

Работает отлично, спасибо! – Nic

1

Удалить путь и просто попытаться сделать это

String image = "file://" + getClass().getResource("/res/sprites/" + pathRelativeToThis); 
URL url = new URL(image); 
BufferedImage img = ImageIO.read(url); 
Смежные вопросы