gpt4 book ai didi

Java 外部类加载 ClassDefNotFoundError

转载 作者:行者123 更新时间:2023-12-01 19:53:08 27 4
gpt4 key购买 nike

因此,对于我正在编写的模组,您可以编写自己的特权以供您的角色使用。这些特权被编译然后放入名为“perks”的文件夹中。我创建了一个抽象类,该类将通过所有这些外部特权进行扩展,并且它保存在主 jar 中。

Perk 抽象类:

public abstract class Perk {

public abstract void onCall( RCPlayer caller );

}

额外津贴示例:

public class ExamplePerk extends Perk {

public void onCall( RCPlayer ) {
// do something...
}

}

我用于加载这些外部 Jars 的方法。我已经删除了所有空检查和 try/catch 语句以保持干净。

private static LoadStatus loadPerk( String path ) {
URL url = new File( path ).toURI().toURL();

URL[] urls = new URL[]{ url };
YamlConfiguration perkYML = null;

ClassLoader cl = new URLClassLoader( urls );
Class<?> cls = Class.forName( main /* class path */, true, cl );
clazz = cls.asSubclass( Perk.class );

// Instantiate class & put into a data structure
perks.put( new Descriptor( main, name, id, description ), clazz.newInstance() );
}

完整错误:https://gyazo.com/e10acb615d88c50480a57118d54a3b17

它抛出 ClassNoDefFoundError 因为它找不到“Perk”抽象类。

我的问题是,如何在运行时指定 Perk 类所在的位置?在编译时,我只是添加了库,但是当需要使用 Perk 类作为扩展时,程序失败并抛出此错误。

如果我将整个主 jar 添加到 perks 文件夹中,它就可以工作。然而,这是不好的做法,因为我必须包含所有项目文件,这会很困惑。

最佳答案

这不起作用,因为它试图实例化一个不可能的抽象类。

请参阅此链接 - 您需要对实际子类的引用。

https://www.tutorialspoint.com/java/lang/class_assubclass.htm

关于Java 外部类加载 ClassDefNotFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50593210/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com