Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.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类路径和类加载_Java_Netbeans 8 - Fatal编程技术网

Java类路径和类加载

Java类路径和类加载,java,netbeans-8,Java,Netbeans 8,我需要在Java运行时加载一个jar文件,我有这段代码,但它没有加载任何jar,我不知道如何加载,有人可以告诉我为什么?我有JVM 8和NetBeans 8,目的是创建一个程序,可以加载jar文件作为Windows的插件 package prueba.de.classpath; import java.io.File; import java.lang.reflect.Method; import java.net.URL; import java.net.URLClassLoader; pu

我需要在Java运行时加载一个jar文件,我有这段代码,但它没有加载任何jar,我不知道如何加载,有人可以告诉我为什么?我有JVM 8和NetBeans 8,目的是创建一个程序,可以加载jar文件作为Windows的插件

package prueba.de.classpath;
import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;

public class PruebaDeClasspath {

    public static void main(String[] args) {
        try {
            Class.forName("PluginNumeroUno");
        } catch (ClassNotFoundException e) {
            System.out.println("Not Found");
        }

        try {
            URLClassLoader classLoader = ((URLClassLoader) ClassLoader
                    .getSystemClassLoader());
            Method metodoAdd = URLClassLoader.class.getDeclaredMethod("addURL",
                    new Class[]{URL.class});
            metodoAdd.setAccessible(true);


            File file = new File("plugins/PrimerPlugins.jar");

            URL url = file.toURI().toURL();
            System.out.println(url.toURI().toURL());

            metodoAdd.invoke(classLoader, new Object[]{url});
        } catch (Exception e) {
            e.printStackTrace();
        }

        try {
            Class.forName("PluginNumeroUno");
            System.out.println("ok");
        } catch (ClassNotFoundException e) {
            System.out.println("Not Found");
        }

    }

}

尝试创建新的类加载器,而不是强制转换系统类加载器

删除此行:

URLClassLoader classLoader = ((URLClassLoader) ClassLoader.getSystemClassLoader());
然后创建新的加载程序并按如下方式使用:

File file = new File("plugins/PrimerPlugins.jar");
URLClassLoader classLoader = new URLClassLoader(new URL[]{file.toURI().toURL()},    
    PruebaDeClasspath.class.getClassLoader());
Class.forName("prueba.de.classpath.PluginNumeroUno", true, classLoader); //fully qualified!
请注意,要加载的类名必须是完全限定的


您也不必动态强制
addURL()
公开

在问题中提供您当前的System.out控制台输出我感觉您正在重新发明轮子。究竟为什么需要手动加载jar文件<代码>java--类路径不这样做吗?