2017-02-12 9 views
0

В ImageJ, Интерфейс Plugin имеет методы запуска(), как это:Как это работает, когда метод run() вызывается при загрузке плагина?

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); 

} 

почему бег() метод может быть автоматически вызывается, когда плагин загружается?

+0

Потому что, как они реализовали? –

+0

Извините, я до сих пор не понимаю. Скажем, я пишу класс с именем ImageCropper, реализованный Plugin и переопределяющий метод run(), и я делаю некоторые операции обрезки изображения в этом методе, после чего он будет автоматически выполняться при загрузке класса ImageCropper. Как ? – Zhang

ответ

3

метод run() может быть вызван автоматически при загрузке плагина?

В этом нет ничего автоматического. Существует строка кода в библиотеке ImageJ, который говорит:

thePlugIn.run(arg); 

Полный фрагмент кода это (от 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; 
}