2017-07-04 12 views
0

のは、私が持っていると言うのサブディレクトリ内のすべてのjarファイルをロードするメインクラスのApp URLClassLoaderの使用プラグインのJava搭載JAR:NoClassDefFoundErrorが

public class App(){ 
    public static void main(String[] args){ 
     for(File f : new File("plugins").listFiles()){ 
       URL[] urls = { new URL("jar:file:" + "plugins/" + f.getName() + ".jar" + "!/") }; 
       URLClassLoader cl = URLClassLoader.newInstance(urls); 

       Class<?> clazz = cl.loadClass(f.getName().toLowerCase()+"."+f.getName()); 
       cl.close(); 
       Plugin p = ((Plugin) clazz.newInstance()); 
     } 
    } 
} 

これらすべてのjarがインターフェイスを実装するクラスが含まれているがプラグイン。

+-- Main.jar 
| +-- App.class 
| +-- Plugin.class 
| 
+-- Plugins/ 
| +-- PluginTest.jar 
|   +-- plugintest 
|    +-- PluginTest.class 
|    +-- Two.class 

コードをPluginTestクラスに書き込むだけで問題なく動作します。しかし、すぐに、私はPluginTestから二つにアクセスしようとして、私は大きなエラーを取得しています:

Exception in thread "Thread-4" java.lang.NoClassDefFoundError: plugintest/Two 
[...] 

にはどうすれば正常にクラスをロードする必要がありますか?助けが必要!ありがとう。

+0

標準名で試しましたか? '' plugintest.PluginTest "'? – m0skit0

答えて

1

クラスローダーを閉じないでください。

cl.close();ステートメントを削除します。

+0

うわー。それは簡単です。信じられないけど、うまくいく。すばらしい速い助けをありがとう! – Galveston01