在Jar-Java内部创建类的新实例时,类未找到异常

在Jar-Java内部创建类的新实例时,类未找到异常,java,api,class,jar,constructor,Java,Api,Class,Jar,Constructor,我试图创建一个类的新实例来调用Java中的方法。但是,因为类位于一个可以正常加载的jar中,所以类不能。这会导致抛出ClassNotFoundException。有人能告诉我怎么解决这个问题吗 代码: private static void loadClassFromJar(String PluginJar) throws MalformedURLException, ClassNotFoundException, InstantiationException, IllegalAccessExc

我试图创建一个类的新实例来调用Java中的方法。但是,因为类位于一个可以正常加载的jar中,所以类不能。这会导致抛出ClassNotFoundException。有人能告诉我怎么解决这个问题吗

代码:

private static void loadClassFromJar(String PluginJar) throws MalformedURLException, ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException {
    File PluginFile = new File("./debug/plugins/DiamondCorePlugin.jar");
    URL[] PluginURLs = { PluginFile.getAbsoluteFile().toURI().toURL() };
    URLClassLoader ClassLoader = URLClassLoader.newInstance(PluginURLs);
    Class<?> PluginClass = ClassLoader.loadClass("net.trenterprises.diamondcore.plugin.Main");
    Method EventMethod = PluginClass.getMethod("onEnable");
    EventMethod.invoke(PluginClass.newInstance());
}
堆栈跟踪:

java.lang.ClassNotFoundException: net.trenterprises.diamondcore.plugin.Main
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
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 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:260)
at net.trenterprises.diamondcore.cross.api.javaplugin.sub.Server.getClassCaller(Server.java:23)
at net.trenterprises.diamondcore.cross.api.javaplugin.sub.Server.getLogger(Server.java:15)
at net.trenterprises.diamondcore.plugin.Main.onEnable(Main.java:11)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at net.trenterprises.diamondcore.cross.api.PluginLoader.loadClassFromJar(PluginLoader.java:55)
at net.trenterprises.diamondcore.cross.api.PluginLoader.loadAllPlugins(PluginLoader.java:25)
at net.trenterprises.diamondcore.DiamondCoreServer.<init>(DiamondCoreServer.java:47)
at net.trenterprises.diamondcore.run.main(run.java:15)

发现问题了!结果表明,该类加载得很好,但在另一个试图获取类名的类中,因为该类位于JAR文件中。它无法加载!谢谢你对伊米比兹和万扎的帮助

您是否绝对确定在运行应用程序时存在./debug/plugins/DiamondCorePlugin.jar?如果没有,你能抛出一个异常吗!PluginFile.isFile抛出新的RuntimeException,看看会发生什么?@vanza是的,我确信这是一个文件,jar加载很好,我运行了一个if语句,就像你告诉我的那样。然后,检查i类文件是否存在于jar中,ii它所依赖的所有类是否也存在。您可能还想使用getClass.getClassLoader或Thread.currentThread.getContextClassLoader作为第二个参数调用URLClassLoader.newInstance。异常不是来自您发布的代码。@immibis是正确的。堆栈跟踪显示正在调用Main.onEnable。所以错误在别的地方。