1

F:/badge-dao/bin/com/badge/dao/impl/ディレクトリにBadgeDaoImplという名前のファイルをロードしたいと考えています。次のコードを書いてテストしています。

ディレクトリまたはクラス名を変更すると、例外がスローされます。次のコードは動作するはずですが、classNotFoundException をスローするのではなく、停止して EventTable の finally ブロックに制御を移します。

どこが間違っているのか教えてください。

URL[] urls = {new URL("file:/F:/badge-dao/bin/com/badge/dao/impl/")};

ClassLoader parentClassLoader = project.getClass().getClassLoader();

URLClassLoader classLoader = new URLClassLoader(urls, parentClassLoader);

selectedClass = classLoader.loadClass("BadgeDaoImpl");
4

1 に答える 1

4

パッケージ名は、クラスパス項目ではなく、完全なクラス名の一部であるため、次のものが必要です。

URL[] urls = {new URL("file:/F:/badge-dao/bin")}; 
...
selectedClass = classLoader.loadClass("com.badge.dao.impl.BadgeDaoImpl"); 

BadgeDaoImpl.class元のコードでは、クラスローダはinという名前のファイルを見つけることができますfile:/F:/badge-dao/bin/com/badge/dao/impl/が、その完全なクラス名 ( com.badge.dao.impl.BadgeDaoImpl) が要求されたもの ( ) と一致しないBadgeDaoImplため、クラスローダはNoClassDefFoundError. のみをキャッチしているため、制御が静かにブロックClassNotFoundExceptionに渡されるように見えます。ファイルが見つからないfinallyようにフォルダーまたはクラス名を変更すると、期待どおりにスローされます。.classClassNotFoundException

于 2011-03-23T09:24:09.380 に答える