Search code examples
javaimagej

How does it work that the method run() is called when the plugin is loaded?


In ImageJ , The Interface Plugin has a methods run() like this:

package ij.plugin;

/** Plugins that acquire images or display windows should
    implement this interface. Plugins that process images 
    should implement the PlugInFilter interface. */
public interface PlugIn {

    /** This method is called when the plugin is loaded.
        'arg', which may be blank, is the argument specified
        for this plugin in IJ_Props.txt. */ 
    public void run(String arg);

}

why the run() method can be automatically called when the Plugin is loaded?


Solution

  • the run() method can be automatically called when the Plugin is loaded?

    There is nothing automatic about it. There is a line of code in imagej library which says:

    thePlugIn.run(arg);
    

    The full snippet is this (from here):

    /** Runs the specified plugin and returns a reference to it. */
    public static Object runPlugIn(String commandName, String className, String arg) {
        if (arg==null) arg = "";
        if (IJ.debugMode)
            IJ.log("runPlugIn: "+className+argument(arg));
        // Load using custom classloader if this is a user 
        // plugin and we are not running as an applet
        if (!className.startsWith("ij.") && applet==null)
            return runUserPlugIn(commandName, className, arg, false);
        Object thePlugIn=null;
        try {
            Class c = Class.forName(className);
            thePlugIn = c.newInstance();
            if (thePlugIn instanceof PlugIn)
                ((PlugIn)thePlugIn).run(arg);
            else
                new PlugInFilterRunner(thePlugIn, commandName, arg);
        }
        catch (ClassNotFoundException e) {
            if (IJ.getApplet()==null)
                log("Plugin or class not found: \"" + className + "\"\n(" + e+")");
        }
        catch (InstantiationException e) {log("Unable to load plugin (ins)");}
        catch (IllegalAccessException e) {log("Unable to load plugin, possibly \nbecause it is not public.");}
        redirectErrorMessages = false;
        return thePlugIn;
    }