I want to do a plugin system for a sprite sheet editor. I found a solution with :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| protected void loadPlugin() throws MalformedURLException { File rep = new File(repPlugin); URL url = rep.toURI().toURL(); URL[] urls = new URL[]{url}; try { this.getClass().getClassLoader().loadClass("net.bonbonchan.tools.spriteanim.plugin.Plugin"); } catch(Exception ex) { System.err.println("Class not found for Plugin !!! O_o"); } URLClassLoader loader = new URLClassLoader(urls); plugins.removeAllElements(); File fic[] = rep.listFiles(); for(int i=0;i<fic.length;i++) { if (fic[i].getName().endsWith(".class")) { try { System.out.println("Loading class : "+fic[i].getAbsolutePath()); String fileName = fic[i].getName(); String className = fileName.substring(0,fileName.indexOf(".")); Class fileClass = loader.loadClass(className); Object fileObject = fileClass.newInstance(); if (fileObject instanceof Plugin) { Plugin plugin = (Plugin)fileObject; plugins.add(plugin); } } catch(Exception ex) { System.out.println(ex.toString()); } } } pluginListModel.setPlugins(plugins); } |
So plugins are subclass of net.bonbonchan.tools.spriteanim.plugin.Plugin in the default package.
In netbean, it work fine. With the jar, it work fine. With JavaWebStart, it doesn't work

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| Java Web Start 1.6.0_05 Utilisation de la version JRE 1.6.0_05 Java HotSpot(TM) Client VM
...
Loading class : E:\ ... \classes\JSAPacker$1.class Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: net/bonbonchan/tools/spriteanim/plugin/Plugin at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) ...
at java.lang.Class.newInstance(Unknown Source) at net.bonbonchan.tools.spriteanim.JMain.loadPlugin(JMain.java:236)
...
Caused by: java.lang.ClassNotFoundException: net.bonbonchan.tools.spriteanim.plugin.Plugin ... |
The line 236 is : Object fileObject = fileClass.newInstance();
I really don't get it.
Why it is thrown at line 236 and not at this.getClass().getClassLoader().loadClass("net.bonbonchan.tools.spriteanim.plugin.Plugin"); ??
Why it is thrown and NOT CATCH by catch(Exception ex)

It is the first time that I do a plugin system, so if someone can help me
