2013-08-22 2 views
2

В моей программе используется Image.class, что помогает мне получить изображение.Абсолютный/относительный путь в java (jar, ide)

Image img = new ImageIcon("Shooter2D/res/background.jpg").getImage();

Когда программа запускается из среды разработки - все работает, после компиляции файла банки - не работает. Расскажите, как правильно установить путь для работы в среде IDE (Intellij IDEA) и в архиве. Shooter2D.jar содержат:

- META-INF 
Manifest-Version: 1.0 
Main-Class: Shooter2Dv22082013.Main 
- res 
all pictures 
- Shooter2Dv22082013 
all .class files, main is Main.class 

ориентировочную цифру: http://imageshack.us/photo/my-images/801/eyjv.png/

+0

Попробуйте использовать его в качестве ресурса: [ссылка] (http://stackoverflow.com/questions/6845231/how-to-correctly -get-image-from-resources-folder-in-netbeans) – ahmedalkaff

ответ

3

Вот что the javadoc говорит о конструкторе ImageIcon:

Создает ImageIcon из указанного файла . Изображение будет предварительно загружено с помощью MediaTracker для контроля состояния загрузки изображения. Указанная строка может быть имя файла или путь к файлу.

(курсив мой)

Ваше изображение не сохраняется в файле. Это не в вашей файловой системе. Это в банке, которая сама по себе находится в пути к классам. И именно там вы хотите загрузить его. Где бы файл jar вашего приложения находился на компьютере конечного пользователя, ваша программа хочет загрузить его из этого файла jar. И все ресурсы в этом файле jar доступны из ClassLoader.

Таким образом, вы должны использовать

new ImageIcon(MyClass.class.getResource("/res/background.jpg")) 

или

new ImageIcon(MyClass.class.getClassLoader().getResource("res/background.jpg")) 
+0

Не уверен, но я думаю, что вы также должны добавить '/' в начале второго пути. –

+0

Я сказал «Скажите, как правильно установить путь для работы в среде IDE (Intellij IDEA) и в архиве.« , если я использую .getResource, то я не могу запустить свое приложение в IDE (IDEA) он бросает Исключение: NullPointerException – Eldar

+0

@ArnaudDenoyelle: Я уверен, что это не нужно. –

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