Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.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 NoClassDefFoundError类加载器_Java_Minecraft_Bukkit - Fatal编程技术网

Java NoClassDefFoundError类加载器

Java NoClassDefFoundError类加载器,java,minecraft,bukkit,Java,Minecraft,Bukkit,我现在在这行上得到一个错误loadedClass=classLoader.loadClass(“scripts.Compass”) 不知怎的,这个文件编译得很好,但当我尝试加载这个类时,它无法工作,因为它说它缺少com/deft/core/scripts/DeftScript类 编译和实例化: File script = new File("./plugins/Deft-Core/scripts/Compass.java"); DiagnosticCollector<Jav

我现在在这行上得到一个错误
loadedClass=classLoader.loadClass(“scripts.Compass”)

不知怎的,这个文件编译得很好,但当我尝试加载这个类时,它无法工作,因为它说它缺少com/deft/core/scripts/DeftScript类

编译和实例化:

    File script = new File("./plugins/Deft-Core/scripts/Compass.java");
    DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();
    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
    StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null);

    List<String> optionList = new ArrayList<String>();
    optionList.addAll(Arrays.asList("-classpath", System.getProperty("java.class.path") + ";./plugins/Deft-Core.jar"));


    Iterable<? extends JavaFileObject> compilationUnit = fileManager.getJavaFileObjectsFromFiles(Arrays.asList(script));
    JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, diagnostics, optionList, null, compilationUnit);
    if (task.call()) {

        Object obj = null;
        try {
            URLClassLoader classLoader = new URLClassLoader(new URL[]{new File("./plugins/Deft-Core/").toURI().toURL()});
            Class<?> loadedClass;
            loadedClass = classLoader.loadClass("scripts.Compass");
            obj = loadedClass.newInstance();
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | MalformedURLException e) {
            e.printStackTrace();
        } 

        if (obj instanceof DeftScript) {
            DeftScript deftScript = (DeftScript)obj;
            deftScript.onEnable();
        }
    } else {
        for (Diagnostic<? extends JavaFileObject> diagnostic : diagnostics.getDiagnostics()) {
            System.out.format("Error on line %d in %s%n", diagnostic.getLineNumber(), diagnostic.getSource().toUri());
        }
    }
DeftScript.java

package com.deft.core.scripts;

public abstract class DeftScript {
     public abstract void onEnable();
}
错误:

java.lang.NoClassDefFoundError: com/deft/core/scripts/DeftScript
    at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.8.0_45]
    at java.lang.ClassLoader.defineClass(Unknown Source) ~[?:1.8.0_45]
    at java.security.SecureClassLoader.defineClass(Unknown Source) ~[?:1.8.0_45]
    at java.net.URLClassLoader.defineClass(Unknown Source) ~[?:1.8.0_45]
    at java.net.URLClassLoader.access$100(Unknown Source) ~[?:1.8.0_45]
    at java.net.URLClassLoader$1.run(Unknown Source) ~[?:1.8.0_45]
    at java.net.URLClassLoader$1.run(Unknown Source) ~[?:1.8.0_45]
    at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_45]
    at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_45]
    at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_45]
    at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_45]
    at com.deft.core.main.DeftCore.onEnable(DeftCore.java:79) ~[?:?]

您需要先加载
com.deft.core.scripts.DeftScript
,然后才能加载
scripts.Compass
,因为它正在扩展它。或者,您可以确保将父类/jar放在父类装入器路径中。

如果您需要这里的帮助,恐怕您需要向我们提供一些关于如何包含依赖项的信息。@TimBiegeleisen不太清楚您的要求。您使用的是Maven、Gradle、Ant、,等等,以便在构建时包含JAR依赖项?我们需要看看有问题的类是如何不被加载的。@TimBiegeleisen正在使用Eclipse进行“编译和实例化”。jar文件被用作Minecraft Spigt/Bukkit服务器的插件文件,Compass.java不在项目范围内。提示我为什么要尝试编译和初始化它。可能的副本不太确定我将如何加载它之前。请参阅“编译和实例化”,DeftScipt类存储在自己的jar文件中。提示optionList.addAll(Arrays.asList(“-classpath”,System.getProperty(“java.class.path”)+”;/plugins/Deft Core.jar”);我在这个jar文件的外面编译Compass.java文件。目录显示在顶部。@Kuliu检查:这似乎有效,并允许它完成实例,但当我尝试转换它时,它抛出了一个“java.lang.ClassCastException:scripts.Compass不能被强制转换为com.deft.core.scripts.DeftScript”事件,尽管它扩展了类DeftScript。@Kuliu您原来的问题得到了回答……您可以发布一个新问题,从更广泛的论坛获得进一步的帮助。
java.lang.NoClassDefFoundError: com/deft/core/scripts/DeftScript
    at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.8.0_45]
    at java.lang.ClassLoader.defineClass(Unknown Source) ~[?:1.8.0_45]
    at java.security.SecureClassLoader.defineClass(Unknown Source) ~[?:1.8.0_45]
    at java.net.URLClassLoader.defineClass(Unknown Source) ~[?:1.8.0_45]
    at java.net.URLClassLoader.access$100(Unknown Source) ~[?:1.8.0_45]
    at java.net.URLClassLoader$1.run(Unknown Source) ~[?:1.8.0_45]
    at java.net.URLClassLoader$1.run(Unknown Source) ~[?:1.8.0_45]
    at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_45]
    at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_45]
    at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_45]
    at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_45]
    at com.deft.core.main.DeftCore.onEnable(DeftCore.java:79) ~[?:?]