Java: ¿por qué el código empaquetado en un archivo jar impide que las clases externas accedan?

Tengo un sistema de complementos para mi aplicación Java. Invoco una clase externa con el cargador de clases de URL. Esa parte funciona bien, tanto cuando mi aplicación se ejecuta como archivos de clase, como cuando mi aplicación está en forma JAR. El problema que estoy encontrando es que los archivos de complementos pueden ejecutar su propio código independiente muy bien, pero crean un JPanel. Cuando intento agregar ese JPanel al JPanel que está en la clase de aplicación principal, obtengo una excepción de puntero nulo que hace referencia a la clase principal. (com.cpcookieman.app.Main) Pero eso no sucede si ejecuto los archivos de clase para la aplicación, solo cuando está empaquetado. ¿Cómo puedo resolver eso?

¿Por qué mi código empaquetado en un archivo jar impide que las clases externas accedan a clases dentro del jar?

EDITAR: Según lo solicitado, el seguimiento de pila.

java.lang.NullPointerException
    at TestPlugin2.Main.<init>(Main.java:23)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at java.lang.Class.newInstance0(Unknown Source)
    at java.lang.Class.newInstance(Unknown Source)
    at com.cpcookieman.ph.PluginLoader$2.run(PluginLoader.java:74)
    at java.lang.Thread.run(Unknown Source)

EDIT 2: el código de carga de la clase

    String pluginsPath;
    if (Main.os.equals("Windows"))
    {
        pluginsPath = "C:\\plugins\\";
    }
    else
    {
        pluginsPath = "~/plugins/";
    }
    File file = new File(pluginsPath);
    if (!file.exists())
    {
        System.out.println("DEBUG: Plugin path could not be found!");
    }
    try
    {
        URL url = file.toURI().toURL();
        final URL[] urls = new URL[]{url};
        new Thread(new Runnable()
        {
            @Override
            public void run()
            {
                try
                {
                    ClassLoader cl = new URLClassLoader(urls);
                    Class plugin = cl.loadClass(text + ".Main");
                    plugin.newInstance();
                    close();
                }
                **snip catch statements**
            }
        }).start();
    }
    **snip catch statements**

El complemento se carga utilizando su constructor y crea un panel que se agrega al marco que está dentro de una de las clases dentro del archivo JAR. El JAR es la aplicación principal, si alguien está confundido acerca de eso.

Respuestas a la pregunta(1)

Su respuesta a la pregunta