ij.io
Class PluginClassLoader

java.lang.Object
  extended byjava.lang.ClassLoader
      extended byij.io.PluginClassLoader

public class PluginClassLoader
extends java.lang.ClassLoader

ImageJ uses this class loader to load plugins and resources from the plugins directory and immediate subdirectories. This class loader will also load classes and resources from JAR files using the Java 1 zip utilities. The primary plugin class cannot be in a JAR file in order to be auto-detected by ImageJ and loaded into the Plugins Menu.

The class loader searches for classes and resources in the following order:

  1. Plugins directory
  2. Subdirectories of the Plugins directory
  3. JAR and ZIP files in the plugins directory and subdirectories

The class loader does not recurse into subdirectories beyond the first level.


Nested Class Summary
 class PluginClassLoader.JARReader
           
 
Field Summary
protected  java.util.Hashtable cache
           
protected  java.util.Vector jarFiles
           
protected  PluginClassLoader.JARReader jarReader
           
protected  java.lang.String path
           
 
Constructor Summary
PluginClassLoader(java.lang.String path)
          Creates a new PluginClassLoader that searches in the directory path passed as a parameter.
 
Method Summary
 java.net.URL getResource(java.lang.String name)
          Returns a resource from the path or JAR files as a URL
 java.io.InputStream getResourceAsStream(java.lang.String name)
          Returns a resource from the path or JAR files as an InputStream
 java.lang.Class loadClass(java.lang.String className)
          Returns a Class from the path or JAR files.
 java.lang.Class loadClass(java.lang.String className, boolean resolveIt)
          Returns a Class from the path or JAR files.
protected  byte[] loadClassBytes(java.lang.String name)
          This does the actual work of loading the bytes from the disk.
 
Methods inherited from class java.lang.ClassLoader
clearAssertionStatus, defineClass, defineClass, defineClass, definePackage, findClass, findLibrary, findLoadedClass, findResource, findResources, findSystemClass, getPackage, getPackages, getParent, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, resolveClass, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

path

protected java.lang.String path

cache

protected java.util.Hashtable cache

jarFiles

protected java.util.Vector jarFiles

jarReader

protected PluginClassLoader.JARReader jarReader
Constructor Detail

PluginClassLoader

public PluginClassLoader(java.lang.String path)
Creates a new PluginClassLoader that searches in the directory path passed as a parameter. The constructor automatically finds all JAR and ZIP files in the path and first level of subdirectories. The JAR and ZIP files are stored in a Vector for future searches.

Parameters:
path - the path to the plugins directory.
Method Detail

getResource

public java.net.URL getResource(java.lang.String name)
Returns a resource from the path or JAR files as a URL

Parameters:
name - a resource name.

getResourceAsStream

public java.io.InputStream getResourceAsStream(java.lang.String name)
Returns a resource from the path or JAR files as an InputStream

Parameters:
name - a resource name.

loadClass

public java.lang.Class loadClass(java.lang.String className)
                          throws java.lang.ClassNotFoundException
Returns a Class from the path or JAR files. Classes are automatically resolved.

Parameters:
className - a class name without the .class extension.
Throws:
java.lang.ClassNotFoundException

loadClass

public java.lang.Class loadClass(java.lang.String className,
                                 boolean resolveIt)
                          throws java.lang.ClassNotFoundException
Returns a Class from the path or JAR files. Classes are resolved if resolveIt is true.

Parameters:
className - a String class name without the .class extension. resolveIt a boolean (should almost always be true)
Throws:
java.lang.ClassNotFoundException

loadClassBytes

protected byte[] loadClassBytes(java.lang.String name)
This does the actual work of loading the bytes from the disk. Returns an array of bytes that will be defined as a Class. This should be overloaded to have the Class Loader look in more places.

Parameters:
name - a class name without the .class extension.