2016-02-02 3 views
0

Я пытаюсь использовать отражение Java для чтения файлов классов и вывода его содержимого. Вот мой код Reflect.java файла, который бросает ошибку:ClassNotFoundException при использовании Class.forName()

String className = classNames.get(classNum).replace(".class", ""); 
     String packageAndClassName = packageName + "." + className; 
     System.out.println(packageAndClassName); 
     try{ 
      Class<?> c = Class.forName(packageAndClassName); 

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

java -classpath . reflect.Reflect package /u/username/Desktop/Experiment/others/package/ 

Здесь, Arg [0] = пакет и аги [1] =/и/имя пользователя/Desktop/Эксперимент/другие/пакет/

Мой путь к классам выглядит так:

/u/username/Desktop/Experiment/reflect/:/u/username/Desktop/Experiment/others/package/ 

«дру ers "содержит пакет. Я понятия не имею, что я делаю неправильно. Я искал много ответов, и они включают в себя ввод всего имени класса Reflect, который я делаю в своей команде. Какие-нибудь идеи относительно того, что мне не хватает?

+0

Как установить 'packageName' в коде? – Timo

+0

Nvm, я получаю имя пакета из аргументов, переданных в main(). поэтому args [0] - это имя пакета и args [1] - абсолютный путь к имени пакета. – user3196429

+0

Вы заменили косые черты '/' на периоды? Пакет java находится в форме 'com.example.package' Итак, если' others' - ваша папка src, это будет 'other.package.YourClass' – Tgsmith61591

ответ

0

Следует обратить внимание на параметр pathpath. Я предполагаю, что класс, который вы пытаетесь загрузить, не находится в пути, поэтому вам нужно добавить туда каталог пакетов.

Другой вариант заключается в использовании UrlClassLoader

+0

я изменил свою терминальную команду, так это выглядит так: Java -cp/у/имя пользователя/Desktop/Эксперимент/reflect.Reflect PACKAGENAME/U/имя пользователя/Desktop/Эксперимент/другие/PACKAGENAME/ Я до сих пор работает в исключение Classnotfound – user3196429

+0

Можете ли вы показать вывод, когда вы печатаете «packageAndClassName» – semperfids

+0

Ребята из Nvm, я получил его на работу, хотя мне пришлось написать файл bash, чтобы он работал, а не работа команды терминала – user3196429

Смежные вопросы