2016-04-09 7 views
0

Я пытаюсь загрузить объект класса из некоторого скомпилированного файла класса, сидящего в моем рабочем каталоге.Загрузка внешних файлов классов без учета классов или пакетов классов

Я кормлю двумя аргументами в основной программе, которая использует URLClassLoader, чтобы получить экземпляр класса из скомпилированного файла TheClassToLoad.class.

у меня есть, в Main программы загрузки классов: (args[0] is for something unrelated)

String classFile_FilePath = args[1]; 
String className = args[2]; 
URL classUrl = new URL(classFile_FilePath); 
URLClassLoader ucl = new URLClassLoader(new URL[]{classUrl}); 

При выполнении этой программы из командной строки в каталоге проекта:

Me:ClassLoadingProgramRootDir Me$ java com.company.Main argZero file:///Users/Me/Desktop/ TheClassToLoad.class

Я считаю поднятое исключение:

Исключение в теме "main" java.la ng.ClassNotFoundException: TheClassToLoad.class

Итак, есть файл TheClassToLoad.class в Desktop/ еще URLClassLoader вызывает исключение без предоставления деталей мне нужно отлаживать ситуацию.

Я новичок в Java и знаю, что пути классов, такие как com.company.Class, часто необходимы для ссылки на истинное имя класса класса, основанное на структуре каталога пакетов. Однако в этом случае я просто попросил, чтобы URLClassLoader предоставил мне экземпляр объекта класса для произвольного скомпилированного файла класса, сидящего где-то на машине.

+1

Если ваш класс имеет оператор «package», вам необходимо соблюдать его при попытке загрузить и использовать его. – bmargulies

ответ

1

Для URLClassLoader URL должен быть каталога, содержащего структуру класса +, а не самого файла класса. В вашем случае это должно быть file:///Users/Me/Desktop/.

Аргумент loadClass должен быть именем класса, а не именем файла класса. В вашем случае это должно быть TheClassToLoad.

Если класс находится в пакете (например, my.pkg.TheClassToLoad), то вы должны использовать это имя класса в качестве аргумента для loadClass, а URL для URLClassLoader все равно должен быть корнем структуры пакета (например, file:///Users/Me/Desktop, если файл file:///Users/Me/Desktop/my/pkg/TheClassToLoad.class).

+0

спасибо, что использование имени класса «полное указание» было основной причиной –

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