Надежный подход для загрузки ресурсов в Java / JNLP - PullRequest
2 голосов
/ 20 июля 2010

Я пишу Java-приложение, которому требуется доступ к нескольким ресурсам в файле .jar, работающем через JNLP.

Хотя приложение отлично работает в моей среде разработки (Eclipse), оно не работает при выполнении через JNLP, по-видимому, потому что не может найти файл ресурсов в jar. Я проверил файл ресурсов, и ресурсы наиболее точно там есть.

Я сейчас использую код вроде:

 someclass.getResourceAsStream("/resources/somefile.png");

Как правильно получить доступ к файлу ресурса в .jar, который будет работать с JNLP?

Ответы [ 2 ]

2 голосов
/ 21 июля 2010

use: this.getClass (). GetClassLoader (). GetResourceAsStream (name)
пример: myClass.getClass (). GetClassLoader (). GetResourceAsStream ("resources / somefile.png")

два совета:
1 - используйте свой собственный класс в jar-файле.если используется другой класс - например, Object - не удается
2 - имя, т. е. ресурс должен быть без начального '/'

1 голос
/ 02 апреля 2012

Я застрял на некоторое время по аналогичной проблеме, и комментарий от @Devon_C_Miller спас меня (когда я это увидел, через некоторое время!), Поэтому я решил переписать его здесь:

Когда вы получаете ресурс через класс, путь разрешается относительно класса, если вы не начинаете его с «/».Когда вы получаете его через ClassLoader, он всегда разрешается как абсолютный путь и не должен начинаться с '/'.

. В моем случае я использую следующий синтаксис для файла, расположенного вбаночка: /properties/config.properties:

//NO LEADING `/` EVEN IF IT IS AN ABSOLUTE PATH
private final static String CONFIG_FILE = "properties/config.properties";
InputStream resource = Configuration.class.getClassLoader().getResourceAsStream(CONFIG_FILE);
...