Java: загрузка ресурсов из файловой системы - PullRequest
2 голосов
/ 22 июля 2010

Настройка моего проекта

У меня есть следующие настройки проекта:

\program.jar  
\images\logo.png

В моем коде я ссылаюсь на изображение с относительным URL "images/logo.png".

Задача

Если я запускаю эту программу со следующей командой, находясь в каталоге:

c:\projects\program_dir\bin\>java -jar program.jar

Тогда все работает, и Java может найти изображение.

Теперь моя проблема в том, что мне нужно иметь возможность запускать программу из другого каталога.

c:\>java -jar c:\projects\program_dir\bin\program.jar

Программа выполнена, но теперь все относительные URL больше не работают.

Что мне нужно

Как рассчитать домашний каталог выполнения файла program.jar, чтобы я мог изменить относительные URL-адреса на абсолютные URL-адреса?

Ответы [ 5 ]

9 голосов
/ 22 июля 2010

Что бы я сделал, если это возможно, это упаковал ваши изображения в ваш Jar.

Таким образом, вам не нужно беспокоиться о том, откуда запускается ваш Jar.

Затем вам необходимо загрузить изображения, подобные следующим:

InputStream stream = this.getClass().getClassLoader().
                                     getResourceAsStream("/images/logo.png");
1 голос
/ 22 июля 2010

Вы действительно должны включить свои ресурсы в свой JAR-файл.

В противном случае вы можете проанализировать абсолютный путь из ресурса класса Main.Предполагая, что ваш главный класс на самом деле называется "Main":

Main.class.getResource("Main.class").getPath();
0 голосов
/ 22 июля 2010

Вам необходимо добавить параметр, который описывает ваш путь к классу. Должно выглядеть примерно так:

java -cp c:\projects\program_dir\bin -jar program.jar

это поместит ваш jar и изображение в путь к классу и будет успешно загружено.

0 голосов
/ 22 июля 2010

Как упоминал Нельсон, упакуйте их в свой JAR-файл (просто скопируйте их вместе с вашими файлами .class), затем вы сможете найти их с помощью простого this.getClass().getClassLoder().getResource("images/foo.png").

0 голосов
/ 22 июля 2010

Ресурсы должны быть в пути к классам. Вы можете попробовать один из них:

  1. Размещение изображений в program.jar.
  2. Как и большинство программ, у них есть каталог APP_HOME, например, MAVEN_HOME, зарегистрируйте это и обратитесь к своим файлам как File вместо - $APP_HOME/the-file.extSystem.getenv()).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...