0

2 つのクラスが同じと見なされるのはいつですか? たとえば、クラスの署名として機能するものはありますか? もしそうなら、署名、パッケージ情報、クラス名などで何が重要ですか? クラスを動的にロードする必要があり、常にClassNotFoundException

もう少し詳しく: 私は Eclipse を使用しています。を持ってabstract class Panelpackage 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 PanelPanel.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) で
4

2 に答える 2