2 つのクラスが同じと見なされるのはいつですか? たとえば、クラスの署名として機能するものはありますか? もしそうなら、署名、パッケージ情報、クラス名などで何が重要ですか? クラスを動的にロードする必要があり、常にClassNotFoundException
もう少し詳しく: 私は Eclipse を使用しています。を持ってabstract class Panelいpackage com.example.project.sub1ます。そして、class Testinpackage com.example.project.sub2を呼び出します
ClassLoader loader = new URLClassLoader(
新しい URL[]{新しい URL("file://" + パス)});
/* パスは実行時に指定され、別の場所にある可能性があります
作業ディレクトリ以外のディレクトリ。それはパスです
ロードする必要があるクラス ファイルの親ディレクトリに移動します。
*/
Class<Panel> panelClass = (Class<Panel>)loader.loadClass(className);
// クラス名は実行時に指定されます。
それはうまくコンパイルされます。Panel.java次に、すべてのものを新しいディレクトリにコピーしclass MyPanel extends Panel、Panel.java. これも問題なくコンパイルされますが、 new へのパスを指定すると、MyPanel.class常にClassNotFoundException. 私が間違っている場所はありますか?ありがとう。
編集: スタック トレース:
java.lang.ClassNotFoundException: MyPanel
java.net.URLClassLoader$1.run(URLClassLoader.java:202) で
java.security.AccessController.doPrivileged(ネイティブメソッド)で
java.net.URLClassLoader.findClass(URLClassLoader.java:190) で
java.lang.ClassLoader.loadClass(ClassLoader.java:306) で
java.lang.ClassLoader.loadClass(ClassLoader.java:247) で
com.example.project.sub2 (Test.java:111) で
java.lang.Thread.run(Thread.java:680) で