gpt4 book ai didi

java - 来自另一个目录的类的初始包

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

我在如何从另一个目录的类文件初始化包时遇到一些问题

File file=new File("D:\\java\\myproject\\Name_pack\\time\\MyClass.class");
URL[] cp =
{
new File(file.getParent()).toURI().toURL()
};
URLClassLoader urlcl = new URLClassLoader(cp);
Class cls = urlcl.loadClass(file.getName().replaceAll("\\.class","");

如果类文件不包含包,则它可以工作。
但它包含一个包,我收到一些如下错误:

Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: Waktu (wrong name: Name_pack/time/MyClass)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:455)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:367)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

我不知道如何获取包裹。

所以,我想要这样的初始:

Class cls = urlcl.loadClass(Name_pack.time.MyClass);

最佳答案

如果您拥有的只是一个绝对文件路径,而不了解代码库或类的预期包,那么事情就会变得复杂。实际的完整限定名包含在类文件中,这就是类加载器拒绝它的原因;它甚至告诉您异常消息中的实际名称,但是,不能保证异常消息将包含该信息。

由于我不假设您想要开始解析字节码以查找实际的类名,因此我建议重新设计应用程序以首先分别接收类路径目录(代码库)和完全限定的类名.

一个简单但不真正推荐的可能性就是尝试一下:

File file=new File("D:\\java\\myproject\\Name_pack\\time\\MyClass.class");
String className=file.getName();
if(!className.endsWith(".class"))
throw new IllegalArgumentException(file.toString());
className=className.substring(0, className.lastIndexOf('.'));
File codeBase=file;
Class cls = null;
do {
codeBase=codeBase.getParentFile();
URL[] cp = { codeBase.toURI().toURL() };
URLClassLoader urlcl = new URLClassLoader(cp);
try { cls = urlcl.loadClass(className); }
catch(NoClassDefFoundError ex) {
className=codeBase.getName()+'.'+className;
}
} while(cls==null);

但正如所说,最好的选择是让无论来源为您提供文件,首先提供正确的代码基目录......

关于java - 来自另一个目录的类的初始包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39360914/

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