2010-07-22 5 views
2

My Setup ProjectJava: Загрузка ресурсов из файловой системы

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

\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-адреса?

ответ

9

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

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

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

InputStream stream = this.getClass().getClassLoader(). 
            getResourceAsStream("/images/logo.png"); 
+0

+1 Использовать путь класса для загрузки статических ресурсов. См. Также: http://stackoverflow.com/questions/861500/url-to-load-resources-from-the-classpath-in-java, http://stackoverflow.com/questions/3294196/load-resource -from-where-in-classpath, http://stackoverflow.com/questions/1900154/classpath-resource-within-jar –

0

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

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

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

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

Main.class.getResource("Main.class").getPath(); 
0

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

0

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

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

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

+0

Это фактически неверно ([java documentation] (http://docs.oracle.com/javase /7/docs/technotes/tools/solaris/java.html)): '-jar. Когда вы используете эту опцию, файл JAR является источником всех пользовательских классов, а другие пути пути пользовательского класса игнорируются.' – nachteil

Смежные вопросы