問題は次です:私はhereから基本クラスローダーコードを取った。私のclassLoaderは、ファイルシステムからクラスをロードできる必要があります(WinOSを使用しましょう)。クラスローダーでは、パス(ファイルシステム上のディレクトリ)を設定するsetAdditionalPath()
メソッドでなければなりません。クラスをロードします(* .class、jarファイルはありません)。こちらのリンクからローダーを変更するコードは、(あなただけのloadClassが変更されていることを、見ることができます)ですが、それは正常に動作しません:カスタムクラスローダーの問題
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まず、パス値をディレクトリで設定します。ここにはいくつかのクラスがあります。次に、このディレクトリにあるクラスを使ってクラスローダーを呼び出しますが、これらの行のいくつかでNPE(NullPointerException)を返します。 'ClassLoader cl = new URLClassLoader(urls); ClassLoader c = cl.getSystemClassLoader(); クラスcls = c.loadClass(className); ' – pikachu
解決策が正しいとは言えません。私が得たい主な結果は、私のクラスローダがメソッドで設定したファイルディレクトリからクラスをロードできることです。それ以外の場合は、親クラスローダが呼び出されます。 – pikachu