ClassLoader.getSystemResourceAsStream (className), возвращающий нуль при попытке загрузить ресурс файла класса - PullRequest
0 голосов
/ 13 октября 2011
Class clazz = ...;
InputStream is = ClassLoader.getSystemResourceAsStream(clazz.getName().replace('.', '/') + ".class");

Входной поток возвращает ноль. Я использовал простой инструментальный инструментарий Java для регистрации классов по мере их загрузки, и класс (clazz) определенно загружается ClassLoader. Я также попробовал

... Thread.currentThread().getContextClassLoader().getResourceAsStream(...));

и он также возвращает ноль. Каковы возможные причины того, что загрузчик классов не может найти ресурс?

Ответы [ 2 ]

2 голосов
/ 13 октября 2011

Класс был загружен другим ClassLoader, отличным от тех, с которыми вы пытаетесь его найти.Попробуйте вместо этого:

InputStream is = clazz.getClassLoader().getResourceAsStream(
    clazz.getName().replace('.', '/') + ".class");

Если не считать ошибки в JVM, я не думаю, что это может вернуть ноль.

1 голос
/ 13 октября 2011

Вы пробовали getClass (). GetClassLoader (). GetResourceAsStream () Пожалуйста, убедитесь, что файл класса, который вы хотите загрузить, в classpath вашего кода.Также, пожалуйста, поделитесь со мной значением clazz.getName ()?

РЕДАКТИРОВАТЬ:

Вы делаете что-то вроде следующего?

Class clazz = Dummy.class;
InputStream is = ClassLoader.getSystemResourceAsStream(clazz.getName().replace('.', '/') + ".class");

Я хочу сказать, что сделатьвы определяете clazz как ClassName .class?Если нет, попробуйте сделать это, а затем посмотрите.

...