Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java 1程序与其他程序对话_Java_Load_Classnotfoundexception - Fatal编程技术网

java 1程序与其他程序对话

java 1程序与其他程序对话,java,load,classnotfoundexception,Java,Load,Classnotfoundexception,我目前正在为服务器开发一个插件。在这个插件中,它需要从另一个文件夹中的类调用方法。下面是一个例子: public class LoadSkill{ private void load(String name, String type, CastingSkill cast){ try{ File folder = new File(this.plugin.getDataFolder(), "Skills"); if(!folder.exists())fold

我目前正在为服务器开发一个插件。在这个插件中,它需要从另一个文件夹中的类调用方法。下面是一个例子:

public class LoadSkill{
private void load(String name, String type, CastingSkill cast){
    try{
        File folder = new File(this.plugin.getDataFolder(), "Skills");
        if(!folder.exists())folder.mkdirs();
        File[] files = folder.listFiles();
        if(files.length>0){
            for(File f : files){
                String skill = f.getName();
                skill = skill.substring(0, skill.length()-4);
                if(name.equals(skill)){
                    URL loadPath = f.toURI().toURL();
                    URL[] classUrl = new URL[]{loadPath};
                    ClassLoader cl = new URLClassLoader(classUrl);
                    Class loadedClass = Class.forName("run.skill.Start", false, cl);
                    if(cast!=null)loadedClass.getDeclaredMethod(name, CastingSkill.class).invoke(loadedClass.newInstance(), cast);
                    else loadedClass.getDeclaredMethod(name).invoke(loadedClass.newInstance());
                }
                return;
            }
        }
    }catch(Exception e){
        System.err.println("Error while trying to load skill " + name + "!");
        e.printStackTrace();
    }
}
}
这将是skills文件夹中的一个jar文件。注意:这是不可运行的,这就是为什么它没有main(String[]args)方法的原因。而且,这是唯一的一节课。是,路径与上述要求不匹配

public class Skill implements Castable{
    public void Enable(){System.out.println("Enabled")}
    public void Cast(){System.out.println("Casting")}
    public void StopAllTimers(){System.out.println("Stopped)}
    public void AddListener(){System.out.println("Listening")}
}

然而,当我运行这段代码时,我得到了一个“ClassNotFoundException”,我不知道为什么。我已经检查过几次了,似乎一切都是正确的。我做错了什么?

你必须提到几件事:

  • 只有当CLA位于根包中时,代码才会工作。如果您的类有一个包名,则必须将其从url中删除:文件为c:\my\classes\java\lang\String.class,则url必须为//文件:/c:/my/classes
  • 大多数服务器使用类加载器hirachy,以支持动态添加类(几乎与您尝试的一样)。如果您的类依赖于其他类,而不包含在引导类路径中,则必须添加适当的父类加载器
  • 如果您的服务器是javaEE服务器(无论是支持ejb还是仅支持servlet runner),并且您不在服务器上工作,ejb规范禁止创建自己的类加载器。这是因为无法以可移植的方式获得正确的父类加载器
  • 大多数服务器允许为不同级别的类加载HIRACHY上的类配置额外的路径

  • 如果您使用某个javaEE服务器,您应该指定问题中的哪一个。

    请包含“ClassNotFoundException”的完整stacktrace。您的类必须有一个main方法。