Как вы отлаживаете getResource - методы стиля, которые терпят неудачу, возвращают null?
Я уверен, что файл, который он ищет, есть, но он возвращает NULL. Как я узнаю, что он ищет, чтобы попытаться обнаружить какое-либо несоответствие?
Как вы отлаживаете getResource - методы стиля, которые терпят неудачу, возвращают null?
Я уверен, что файл, который он ищет, есть, но он возвращает NULL. Как я узнаю, что он ищет, чтобы попытаться обнаружить какое-либо несоответствие?
Так как getResource()
выполняет поиск в пути к классам (как указывали другие), может оказаться полезным сбросить фактический путь к классу, прежде чем вы вызовете вызов getResource()
:
log.debug("classpath is: " + System.getProperty("java.class.path"));
//the line that is returning null
... = Thread.currentThread().getContextClassLoader().getResource("foobar");
Что, вероятно, происходит, так это то, что файлы/каталоги, которые, по вашему мнению, находятся в пути к классам, на самом деле не являются (возможно, некорректный путь устанавливается где-то на этом пути).
Вы можете использовать режим отладки Eclipse-debug и установить точку останова на методе, который терпит неудачу. Оттуда вы можете пойти шаг за шагом в дереве вызовов, пока не увидите, что не удается.
Наиболее распространенным является то, что файл отсутствует, потому что он не был скопирован или отсутствует в classpath и т.д.
Вызов getResource ищет файл относительно файла класса.
Мое первое предположение заключалось в том, что когда вы скомпилировали, вы забыли поместить файлы ресурсов в папку компиляции. Это то, над чем я часто работал.
Я обычно испытываю это при изменении ClassLoader.
В зависимости от точного контекста, в котором работает приложение, ClassLoaders имеют разные правила о том, когда существует файл ресурсов. Например, в netbeans getResource нечувствителен к регистру, но в Sun JRE это.
Хотя я не ответил напрямую на ваш вопрос, я подумал, что вы должны это знать (если вы этого еще не сделали).
Я думаю, вы должны сказать Eclipse или вашу любимую IDE, где можно найти исходные файлы JDK (JRE). Затем вы можете также ввести методы классов Java Runtime.