2 つのクラスが同じと見なされるのはいつですか? たとえば、クラスの署名として機能するものはありますか? もしそうなら、署名、パッケージ情報、クラス名などで何が重要ですか? クラスを動的にロードする必要があり、常にClassNotFoundException
もう少し詳しく: 私は Eclipse を使用しています。を持ってabstract class Panel
いpackage com.example.project.sub1
ます。そして、class Test
inpackage 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) で