gpt4 book ai didi

Java - 如何从 JAR 动态实例化抽象类?

转载 作者:行者123 更新时间:2023-12-01 13:07:24 24 4
gpt4 key购买 nike

我正在尝试使用 Javassist 加载一个在运行时从 JAR 文件动态加载的抽象方法类。由于某种原因,此代码只能在 Windows 操作系统上运行。我在任何其他平台上都会收到 ClassDefNotFoundException。这是我使用的代码。

public static void example() throws Exception {
String pathToJar = "pathToJar.jar";
File JARFile = new File(pathToJar);
ClassLoader classLoader = URLClassLoader.newInstance(new URL[]{ JARFile.toURI().toURL() });
Class<?> callBackClass = classLoader.loadClass("package.Callback");

ProxyFactory factory = new ProxyFactory();
factory.setSuperclass(callBackClass);
MethodHandler handler = new MethodHandler() {

@Override
public Object invoke(Object self, Method overridden, Method forwarder,
Object[] args) throws Throwable {
return forwarder.invoke(self, args);
}
};

factory.setFilter(
new MethodFilter() {
@Override
public boolean isHandled(Method method) {
return Modifier.isAbstract(method.getModifiers());
}
}
);
Object instance = factory.create(new Class<?>[0], new Object[0], handler); /*exception thrown here on non-windows OS*/
}

这是类加载器的问题吗?还是Javassist的问题?它应该是独立于平台的,但根据操作系统,它可能会也可能不会运行。

最佳答案

exception thrown here on non-windows OS

这是一个很大的线索,表明某处存在大小写差异。 Windows 使用的主要文件系统不区分大小写,而其他地方 (*nix) 使用的主要文件系统则区分大小写。因此,请仔细查看您尝试加载的资源的大小写,并确保您正在加载的资源在代码中的大小写与在 jar 或文件系统中的大小写完全相同。

关于Java - 如何从 JAR 动态实例化抽象类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23167148/

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