Class.getResource () возвращает ноль в моем приложении Eclipse?Не можете настроить classpath? - PullRequest
6 голосов
/ 29 сентября 2011

Я пытаюсь использовать Class.getResource("rsc/my_resource_file.txt") для загрузки файла в приложение Eclipse.Однако независимо от того, что я делаю в Eclipse, путь к классам всегда содержит только одну запись в Eclipse Launcher:

... / eclipse / plugins / org.eclipse.equinox.launcher_1.2.0.v20110502pkc

Как настроить путь к классам?

Примечание. Во время выполнения я определяю путь к классам с помощью следующего кода:

URLClassLoader cl = (URLClassLoader) ClassLoader.getSystemClassLoader();
for (URL classpathURL : cl.getURLs()) {
    System.out.println(classpathURL);
}

РЕДАКТИРОВАТЬ: дополнительная информация.

Корень проблемы в том, что Class.getResource("rsc/my_resource_file.txt") возвращает ноль.Сделав несколько небольших экспериментов в простом 5-строчном «Java-приложении», я подумал, что понял это и проблема связана с classpath.Очевидно, classpath ведет себя немного по-другому с «Eclipse Application».Я решил проблему, выполнив Class.getResource("/rsc/my_resource_file.txt") Спасибо BalusC.

Ответы [ 3 ]

8 голосов
/ 29 сентября 2011

Пожалуйста, сделайте шаг назад.Ваша конкретная проблема в том, что ресурс возвращает null, верно?Вы уверены, что его путь правильный?Как у вас, это относительно пакета текущего класса.Разве путь не должен начинаться с / относительно корня пакета?

URL resource = getClass().getResource("/rsc/my_resource_file.txt");
// ...

В качестве альтернативы вы также можете использовать загрузчик классов контекста, он всегда относительно корня classpath (пакета):

ClassLoader loader = Thread.currentThread().getContextClassLoader();
URL resource = loader.getResource("rsc/my_resource_file.txt");
// ...

По крайней мере, пусковая установка Eclipse здесь не виновата.

3 голосов
/ 29 сентября 2011

Поместите файл в каталог верхнего уровня в вашем исходном дереве. Это часто называют "SRC". Затем, когда вы создаете свой проект, файл будет скопирован в каталог вашего класса (имя меняется). Наконец, после сборки файл будет находиться в вашем classpath (в среде eclipse).

Class someClassObject = BlammyClassName.class;
someClassObject.getResource("my_resource_file.txt");

вернет URL вашего ресурса.

someClassObject.getResourceAsStream("my_resource_file.txt");

вернет поток.

Редактировать: изменено так, что оно не ссылается на методы класса статически.

3 голосов
/ 29 сентября 2011

Щелкните правой кнопкой мыши по проекту и следуйте свойствам.

...