Как упаковать ресурсы, к которым осуществляется прямой доступ, в файл jar

Я недавно разработал игру в Slick2D, я получил прямой доступ ко всем своим изображениям, например

Image i = new Image("address.png");

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

Мне было интересно, можно ли по-прежнему загружать все ресурсы в банку, я добавил папку /res в свой путь сборки и использовал jarsplice для добавления своих библиотек и нативов, однако банка не запустится, потому что не может найти изображения.


person Josh Jackson    schedule 03.10.2012    source источник
comment
Вы должны использовать ‹a href=docs.oracle.com/javase/7/docs/api/java/lang/› или аналогичный.   -  person Suzan Cioc    schedule 03.10.2012


Ответы (1)


Image i = new Image("address.png");

Просматривает корневую файловую систему, в которой работает ваше приложение. Если вы хотите использовать ресурсы, упакованные в ваш jarfile, вы должны сделать:

Image i = new Image(getClass().getResource("/res/address.png").toURI()); // In case your Image object accepts URI as parameters

ИЗМЕНИТЬ

Image i = new Image(getClass().getResource("/res/address.png").toExternalForm()); // Since your object only accept Strings
person Bruno Vieira    schedule 03.10.2012
comment
Бруно, будет ли второй вариант работать универсально, то есть когда вы запускаете приложение из скомпилированных классов (например, запуск/отладка Eclipse), а также запускаете его из банки? - person amphibient; 03.10.2012
comment
Да, обязательно будет. Кстати, какой это объект изображения? - person Bruno Vieira; 03.10.2012
comment
Спасибо за ответ, однако, когда я это делаю, я получаю сообщение об ошибке. Будет ли этот метод работать с версией изображения org.newdawn.slick.Image? - person Josh Jackson; 03.10.2012
comment
СПАСИБО, я немного новичок в экспорте, и это очень помогло, спасибо :) - person Josh Jackson; 03.10.2012
comment
Не забудьте отметить ответ как правильный. В противном случае stackoverflow никогда не узнает, что ваши проблемы решены. Кроме того, вы зарабатываете репутацию, принимая ответ (как и тот, кто ответил) - person Bruno Vieira; 03.10.2012
comment
На самом деле - извините за беспокойство, но он все еще не работает - я не получаю сообщение об ошибке, пока не запущу его, а затем я получаю - person Josh Jackson; 03.10.2012
comment
Исключение в потоке main java.lang.NullPointerException в Main.Menu.init(Menu.java:44) в Main.MainClass.initStatesList(MainClass.java:28) в org.newdawn.slick.state.StateBasedGame.init(StateBasedGame. java:164) в org.newdawn.slick.AppGameContainer.setup(AppGameContainer.java:390) в org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:314) в Main.MainClass.main(MainClass.java:40 ) - person Josh Jackson; 03.10.2012
comment
Опубликуйте свою строку 40 из вашего MainClass.java здесь - person Bruno Vieira; 03.10.2012
comment
appgc.start(); так что я предполагаю, что есть проблема со всей программой, потому что этот метод загрузки ресурсов не совместим со Slick - person Josh Jackson; 03.10.2012
comment
Строка сообщения 28 (извините, я имею в виду 28 в моем последнем комментарии, просто отвлекся) - person Bruno Vieira; 03.10.2012
comment
this.getState(меню).init(gc, это); здесь я вызываю меню класса (где я использую эту технику) - person Josh Jackson; 03.10.2012
comment
Кстати, опубликуйте это как еще один вопрос со всем файлом main.java. Кажется, это больше не нужно делать с упакованными ресурсами - person Bruno Vieira; 03.10.2012
comment
Как упаковать ресурсы, к которым осуществляется прямой доступ, в файл jar — Полный исходный код - person Josh Jackson; 03.10.2012