проблема следующая: я взял базовый классLoader код от here. но мой классLoader определен из точки, что он должен иметь возможность загружать классы из файловой системы (возьмем WinOS), поэтому в classLoader должен быть некоторый метод setAdditionalPath()
, который устанавливает путь (каталог в файловой системе), из которого мы 'Класс нагрузки (только * .class, без банок). вот код, который изменяет загрузчик из ссылки (вы можете увидеть, что только loadClass изменяется), но он не работает должным образом:пользовательский классLoader issue
public void setAdditionalPath(String dir) {
if(dir == null) {
throw new NullPointerException("");
}
this.Path = dir;
}
public Loader(){
super(Loader.class.getClassLoader());
}
public Class loadClass(String className) throws ClassNotFoundException {
if(Path.length() != 0) {
File file = new File(Path);
try {
// Convert File to an URL
URL url = file.toURL();
URL[] urls = new URL[]{url};
// Create a new class loader with the directory
ClassLoader cl = new URLClassLoader(urls);
ClassLoader c = cl.getSystemClassLoader();
Class cls = c.loadClass(className);
return cls;
} catch (MalformedURLException e) {
} catch (ClassNotFoundException e) {
}
}
return findClass(Path);
}
Я благодарен, если кто-нибудь помогает :)
Какую ошибку (ы), если таковые имеются, вы получаете. Это может быть сложно отладить с небольшим количеством информации. –
@Legend сначала я установил значение Path с каталогом, где находятся некоторые классы. то я вызываю classloader с классом, который находится в этом каталоге, но он возвращает NPE (NullPointerException) в некоторых из этих строк 'ClassLoader cl = new URLClassLoader (urls); ClassLoader c = cl.getSystemClassLoader(); Класс cls = c.loadClass (className); ' – pikachu
Я не могу сказать, что мое решение верное. основной результат, который я хочу получить, заключается в том, что мой загрузчик классов сможет загружать классы из каталога файлов, которые я установил в методе, в противном случае вызывается родительский загрузчик классов. – pikachu