Подтвердить что ты не робот

Отладка getResource *

Как вы отлаживаете getResource - методы стиля, которые терпят неудачу, возвращают null?

Я уверен, что файл, который он ищет, есть, но он возвращает NULL. Как я узнаю, что он ищет, чтобы попытаться обнаружить какое-либо несоответствие?

4b9b3361

Ответ 1

Так как getResource() выполняет поиск в пути к классам (как указывали другие), может оказаться полезным сбросить фактический путь к классу, прежде чем вы вызовете вызов getResource():

log.debug("classpath is: " + System.getProperty("java.class.path"));

//the line that is returning null
... = Thread.currentThread().getContextClassLoader().getResource("foobar");

Что, вероятно, происходит, так это то, что файлы/каталоги, которые, по вашему мнению, находятся в пути к классам, на самом деле не являются (возможно, некорректный путь устанавливается где-то на этом пути).

Ответ 2

Вы можете использовать режим отладки Eclipse-debug и установить точку останова на методе, который терпит неудачу. Оттуда вы можете пойти шаг за шагом в дереве вызовов, пока не увидите, что не удается.

Наиболее распространенным является то, что файл отсутствует, потому что он не был скопирован или отсутствует в classpath и т.д.

Ответ 3

Вызов getResource ищет файл относительно файла класса.

Мое первое предположение заключалось в том, что когда вы скомпилировали, вы забыли поместить файлы ресурсов в папку компиляции. Это то, над чем я часто работал.

Ответ 4

Я обычно испытываю это при изменении ClassLoader.

В зависимости от точного контекста, в котором работает приложение, ClassLoaders имеют разные правила о том, когда существует файл ресурсов. Например, в netbeans getResource нечувствителен к регистру, но в Sun JRE это.

Хотя я не ответил напрямую на ваш вопрос, я подумал, что вы должны это знать (если вы этого еще не сделали).

Ответ 5

Я думаю, вы должны сказать Eclipse или вашу любимую IDE, где можно найти исходные файлы JDK (JRE). Затем вы можете также ввести методы классов Java Runtime.