Java 从jar文件运行方法,它们扩展了一个类

Java 从jar文件运行方法,它们扩展了一个类,java,Java,我是否可以从am插件运行方法,如onEnable(),我的脚本无法运行:( 扩展类: package de.R3N3PDE.X.API; import de.R3N3PDE; public class JavaPlugin{ Server server; public ServerManager getServer(){ return new ServerManager(server); } public ServerManager setSe

我是否可以从am插件运行方法,如onEnable(),我的脚本无法运行:(

扩展类:

package de.R3N3PDE.X.API;
import de.R3N3PDE;

public class JavaPlugin{
    Server server;
    public ServerManager getServer(){
        return new ServerManager(server);
    }

    public ServerManager setServer(Server s){
        server = s;
    }

    public PluginLogger getLogger(){
        return new PluginLogger(server);
    }
}
插件:

package de.R3N3PDE.PluginExample;
import de.R3N3PDE.X.API.JavaPlugin;

public class PluginExample extends JavaPlugin{
    public void onEnable(){
        getLogger().info("Plugin Enabled!");
    }
}
package de.R3N3PDE.PluginExampleName;
import de.CodingDev.X.Server.API.JavaPlugin;

public class PluginExampleName extends JavaPlugin{
    @Override
    public void onEnable() {
        System.out.println("Test");
        getLogger().info("Plugin Enabled!");
    }
}
插件加载程序:

package de.R3N3PDE.X.Plugin;
imports de.R3N3PDE.X.API.JavaPlugin;

public void initPlugins(){
    try {
        File loc = new File("plugins");
        extendClasspath(loc);

        ServiceLoader<JavaPlugin> sl = ServiceLoader.load(JavaPlugin.class);
        Iterator<JavaPlugin> apit = sl.iterator();
        while (apit.hasNext()){;
            JavaPlugin met = apit.next();
            //Set the Server
            med.setServer(s);
            //run void onEnable(); in the Plugin????
        }

    } catch (IOException e) {
        e.printStackTrace();
    }
}
我制作了一个新的插件加载程序,但旧版本不起作用:

public void onLoad(){
    File loc = new File("plugins");

    File[] flist = loc.listFiles(new FileFilter() {
        public boolean accept(File file) {return file.getPath().toLowerCase().endsWith(".jar");}
    });
    URL[] urls = new URL[flist.length];
    for (int i = 0; i < flist.length; i++)
        urls[i] = flist[i].toURI().toURL();
    URLClassLoader ucl = new URLClassLoader(urls);
    for(URL url : ucl.getURLs()){
        s.getLogger().info("PluginLoader", "Found Plugin: " + url.getFile());
    }
    ServiceLoader<JavaPlugin> sl = ServiceLoader.load(JavaPlugin.class, ucl);

    Iterator<JavaPlugin> apit = sl.iterator();
    while (apit.hasNext()){
        s.getLogger().info("PluginLoader", "Loading Plugin");
        apit.next().onEnable();
    }
}
public void onLoad(){
File loc=新文件(“插件”);
文件[]flist=loc.listFiles(新文件过滤器(){
公共布尔接受(文件文件){return File.getPath().toLowerCase().endsWith(“.jar”);}
});
URL[]URL=新URL[flist.length];
for(int i=0;i
日志:

[日志][02.11.2013 15:26:09][插件加载程序][信息]加载插件


[LOG][02.11.2013 15:26:09][PluginLoader][INFO]找到了插件:/C:/Users/René/Desktop/Server/plugins/CommandLogger.jar

用抽象的方法将类抽象化怎么样

public abstract class JavaPlugin{
    Server server;
    public ServerManager getServer(){
        return new ServerManager(server);
    }

    public ServerManager setServer(Server s){
        server = s;
    }

    public PluginLogger getLogger(){
        return new PluginLogger(server);
    }

    public abstract void onEnable();
}
然后必须在子类中实现onEnable方法。 然后可以调用扩展JavaPlugin的任何动态生成的子类的onEnable方法

第二种方法是在Javaplugin中实现onEnable方法,然后在扩展类中重写该方法

public class JavaPlugin {
    ...
    public void onEnable(){
        getLogger().info("JavaPlugin onEnable default implementation!");
    }
}
在您的PluginExample文件中:

public class PluginExample extends JavaPlugin{
    @Override
    public void onEnable(){
        getLogger().info("Plugin Enabled!");
    }
}

met
med
相同吗?是拼写错误还是我遗漏了什么?是的,met与med相同,是拼写错误“PluginExample”是一个示例类,类名为dynamiclycheck out new suggestions查看顶部的问题后:=================================================================================编辑: